2子进程不显示消息

时间:2014-01-05 10:24:40

标签: c pipe

我正在尝试学习编程,我不明白为什么我不能让孩子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;

   }

1 个答案:

答案 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)