如何在 C 中正确执行多重重定向
How to properly perform multiple redirection in C
我有一个关于多重重定向的问题。正如我现在所写的那样,只写在 file1.txt 中。我必须在我的 shell
上实施 echo hello > file1.txt > file2.txt > file3.txt
这是我的代码:
int fd1 = open(file1.txt, O_RDWR);
int fd2 = open(file2.txt, O_RDWR);
int fd3 = open(file3, O_RDWR);
dup2(fd1,1); //to redirect fd1 on the stdout
dup2(fd2,fd1); //to redirect fd2 to fd1 so i can read from fd1
dup2(fd3,fd1); //to redirect fd3 to fd1 so i can read from fd1
char* arr = {"hello"};
execvp("echo",arr);
但是上面的代码只适用于第一次重定向。其余的 fd2 和 fd3 未按需要重定向。感谢所有帮助!谢谢
编辑:预期结果将是 file1.txt、file2.txt 和 file3.txt 将包含单词 "hello".
在经典的 Unix 进程模型中没有直接的方法可以做到这一点。
stdout 只能指向一个位置,这就是为什么 echo hello > file1.txt > file2.txt > file3.txt
在大多数 shell 中只会写入 file3.txt
的原因(bash、dash、ksh、busybox sh).
在这些 shell 中,您必须 运行:
echo hello | tee file1.txt file2.txt file3.txt > /dev/null
Zsh 是唯一一个可以写入所有三个文件的 shell,它通过实现自己的 tee
来实现,就像上面一样(通过将 stdout 设置为管道,并分叉一个进程从管道读取并写入多个文件)。你也可以这样做。
我有一个关于多重重定向的问题。正如我现在所写的那样,只写在 file1.txt 中。我必须在我的 shell
上实施echo hello > file1.txt > file2.txt > file3.txt
这是我的代码:
int fd1 = open(file1.txt, O_RDWR);
int fd2 = open(file2.txt, O_RDWR);
int fd3 = open(file3, O_RDWR);
dup2(fd1,1); //to redirect fd1 on the stdout
dup2(fd2,fd1); //to redirect fd2 to fd1 so i can read from fd1
dup2(fd3,fd1); //to redirect fd3 to fd1 so i can read from fd1
char* arr = {"hello"};
execvp("echo",arr);
但是上面的代码只适用于第一次重定向。其余的 fd2 和 fd3 未按需要重定向。感谢所有帮助!谢谢
编辑:预期结果将是 file1.txt、file2.txt 和 file3.txt 将包含单词 "hello".
在经典的 Unix 进程模型中没有直接的方法可以做到这一点。
stdout 只能指向一个位置,这就是为什么 echo hello > file1.txt > file2.txt > file3.txt
在大多数 shell 中只会写入 file3.txt
的原因(bash、dash、ksh、busybox sh).
在这些 shell 中,您必须 运行:
echo hello | tee file1.txt file2.txt file3.txt > /dev/null
Zsh 是唯一一个可以写入所有三个文件的 shell,它通过实现自己的 tee
来实现,就像上面一样(通过将 stdout 设置为管道,并分叉一个进程从管道读取并写入多个文件)。你也可以这样做。