日期:2014-05-16  浏览次数:20600 次

进程间通信---关于管道
C/C++ code

1 #include<stdio.h>
2 #include<unistd.h>
3 #include<stdlib.h>
4
5 int main()
6 {
7     int n;
8     pid_t pid;
9     int fd[2];
10     char line[56];
11     if(pipe(fd) < 0)
12     {
13         printf("pipe error\n");
14     }
15     if((pid = fork()) > 0){
16         close(fd[1]);
17         n = read(fd[0],line,56);
18         if(n > 0){
19             printf("%s\n",line);
20         }
21     }else if(pid == 0){
22         dup2(fd[1],1);
23         close(fd[1]);
24         close(fd[0]);
25         int x = 20;
26         while(x){
27             printf("hello world\n");
28             x--;
29             sleep(1);
30         }
31         return 0;
32     }
33     return 0;
34 }
35


以上代码,没问题,如果我把子进程里的 x-- 去掉,父进程就会一直阻塞,请问为什么?因为子进程执行不完的原因吗?父进程没有从管道读取56个字符码?为什么没输出来?

------解决方案--------------------
感觉是标准IO库写pipe时是全缓存的....
子进程会一直到最后全写完发会真正发送到pipe的读端
你可以在子进程里加fflush(stdout)看一下