【发布时间】:2011-05-11 10:22:42
【问题描述】:
在下面的 sn-p 中,我将 ls 命令的输出重定向到 wc -l 的输入,这非常有效。现在我还想将 ls 命令的输出重定向到一个名为“beejoutput.xml”的文件。 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;
}
【问题讨论】:
-
为什么要在 execlp("wc") 之前关闭 pfds[1]?
-
因为 FD 不应该传递给 wc 命令。
-
@weekens:因为我们不想向管道写入任何内容。pfds[1] 将用于从父进程向子进程发送数据。
-
好的。您能否在 fopen 之后评论 2 次对 dup2 的调用? (我读了那个人,但还是听不懂。)编辑:尤其是第一个。
标签: c process file-descriptor child-process dup2