我使用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
看起来管道()的调用减少了进程。我很迷茫。大家都知道原因吗?非常感谢!