在下面的代码片段中,我重定向了 ls
的输出命令输入 wc -l
效果很好。现在我还想重定向 ls
的输出使用以下代码向名为“beejoutput.txt”的文件发出命令,但它不起作用。需要帮助。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int pfds[2];
pipe(pfds);
if (!fork())
{
dup2(pfds[1],1);
close(pfds[0]);
execlp("ls", "ls",NULL);
}
else
{
FILE *outputO=fopen ("beejoutput.txt", "w"); //opening file for writing
dup2(pfds[0],0);
dup2(fileno(outputO),pfds[0]);
close(pfds[1]);
execlp("wc", "wc","-l", NULL);
}
return 0;
}
最佳答案
dup
函数复制一个文件描述符,即新旧文件描述符之后都指向同一个打开的文件。这不同于让单个文件描述符同时引用两个不同的文件。
如果你想将相同的数据发送到两个不同的目的地,你需要在不同的进程中生成这两个命令,然后自己进行复制,或者生成一个“tee”命令的副本——无论哪种方式,你最终都会具有三个过程。
关于c - 写入文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5962708/