gpt4 book ai didi

c - 使用 dup2 和 strtok 将一个文件重定向到另一个文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:22 25 4
gpt4 key购买 nike

我必须编写一个程序,其中我需要使用 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);
}
}
}
}

如有任何帮助,我们将不胜感激。

最佳答案

除了向后strtok争论,还有其他问题。

  • 父进程关闭fd它从未打开过(这是一个未初始化的变量,所以你关闭了一个可能不存在的随机 fd)
  • 子进程执行两次打开和两次 dup2,但只有一次关闭。你在泄露一个 fd。
  • 硬编码文件名
  • 你寻找一个“<”但有一个循环来检测多个“>”
  • 缺少<stdlib.h>对于 exit()
  • 谁真正认为S_IRWXU0700 更具可读性?

如果您的目标是模拟真实 shell 的行为,您至少应该忽略重定向运算符周围的空格。

关于c - 使用 dup2 和 strtok 将一个文件重定向到另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com