pipe()减少进程数

时间:2018-06-07 09:03:03

标签: process pipe fork

我使用fork为他们的通信创建进程和pipe()。但是,发生了一些奇怪的事如下:

int foo()
{
    int pd[2]; 
    char read_msg[100];
    for (int i = 0;i < 3;++i) {
        //pipe(pd);

        int pid = fork();
        if (pid < 0) perror("Something failed on trying to create a child process!\n");
        if (pid > 0){ //Parent
            close(pd[0]);
            dup2(pd[1], 1);
            printf("miao");
            fflush(stdout);
            close(pd[1]);

            wait(NULL);
        }
        else{ //Child
            close(pd[1]);
            dup2(pd[0], 0);

            scanf("%s", read_msg);
            printf("%s\n", read_msg);
            close(pd[0]);

        }
    }
}

代码的输出是:

miao
miao
miao
miao
miao
miao
miao

但是,如果我取消&#34; pipe(pd)&#34;结果将是:

miao
miao
miao

看起来管道()的调用减少了进程。我很迷茫。大家都知道原因吗?非常感谢!

0 个答案:

没有答案