我必须编写一个程序,在其中我需要使用 strtok 和 dup2 将一个文件重定向到另一个文件,但我还需要让用户实际输入命令 cat < file1 > file2,但不是来自 shell,而是通过使用我的程序。这就是为什么我需要strtok。而我的程序无法运行的原因可能就是因为这个,因为我并不真正了解 strtok 是如何工作的。我在互联网上找到了一个类似的程序,但他们只是使用 ls 命令并将其重定向到文件。而已。我的程序要复杂得多。我的意思是,在 shell cat < file1 > file2 中说会更容易,但出于某种原因,他们希望我们这样做。所以,无论如何,这就是我到目前为止所拥有的(这里我只是将我在互联网上找到的内容与我之前已经拥有的内容结合起来。我们必须做类似的事情,但用户只需要使用 ls 或 ls -l。很简单的东西。至少对我来说,这要困难得多。)
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <sys/wait.h>
#include <string.h>
int main() {
pid_t pid;
char line[256];
char *args[129];
int i;
int fd;
int status;
char *temp;
while (1) {
printf(">");
if (fgets(line, 256, stdin) == 0) {
exit(0);
}
else {
pid = fork();
if (pid == 0) {
i = 0;
temp = strtok("<",line);
while (temp != NULL) {
args[i++] = temp;
temp = strtok(">",line);
args[i] = '\0';
}
fd = open("hello", O_RDONLY);
dup2(fd, STDIN_FILENO);
fd = open("world", O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU);
dup2(fd, STDOUT_FILENO );
close(fd);
execvp(args[0], args);
}
else {
close(fd);
wait(&status);
}
}
}
}
任何帮助将不胜感激。