【发布时间】:2018-12-05 12:04:59
【问题描述】:
我正在尝试编写一个使用 pipe 和 fork 执行 ls | wc 的 C 程序,但我无法弄清楚我的代码有什么问题。当我运行下面的代码时,没有返回任何内容。
int main() {
pid_t p1, p2;
int fd1[2];
pipe(fd1);
p1 = fork();
if (p1 == 0) {
close(STDOUT_FILENO);
dup2(fd1[1], STDOUT_FILENO);
close(fd1[0]);
execlp("ls", "ls", (char *)NULL);
} else {
p2 = fork();
if (p2 == 0) {
dup2(fd1[0], STDIN_FILENO);
close(fd1[0]);
close(fd1[1]);
execlp("wc", "wc", (char *)NULL);
} else {
waitpid(p2, 0, WUNTRACED);
waitpid(p1, 0, WUNTRACED);
}
}
return 0;
}
【问题讨论】:
-
“什么都不返回”是什么意思?
-
旁注:两个分叉后不对称有什么原因吗?一旦你关闭了你想要
dup的文件描述符,其他时候就不会。您是否有理由不关闭父进程中的管道文件描述符?将0作为第二个参数int *status传递给waitpid的原因是什么?