我正在尝试学习编程,我不明白为什么我不能让孩子2打印你好。我还关闭了父级管道的读取和写入两端,因为我不希望父级进行通信。非常感谢任何帮助。
int main ()
{
int fd[2];
pid_t child_pid, child_pid1;
if (pipe(fd) < 0)
{
printf("Pipe error");
}
child_pid = fork (); // child 1
if (child_pid != 0)
{
printf("im child 1");
dup2 (fd[1], STDIN_FILENO);
printf("greetings");
child_pid1 = fork (); //child 2
if (child_pid1 != 0)
{
printf("im child 2");
dup2(fd[0], STDOUT_FILENO);
printf("hello");
}
else if (child_pid1 > 0) //Parent Code
{
close (fd[0]);
close (fd[1]);
}
}
return 0;
}
答案 0 :(得分:0)
您的第一个if
条款错误。
child_pid = fork (); // child 1
if (child_pid != 0)
{
printf("im child 1");
}
这不是孩子,而是父母。如果是孩子,那么pid将为0,仅适用于您拥有child_pid != 0
的父母。
第二个if
子句也是如此。
如果您希望在子进程中执行该代码,则在这两种情况下都应该if(child_pid == 0)
。