当前位置: 技术问答>linux和unix
进程间通信---关于管道
来源: 互联网 发布时间:2017-03-03
本文导语: 1 #include 2 #include 3 #include 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){ 16 close(fd[1]); 17 n = read(fd[0],line,56); 18 if(n > 0){ 1...
1 #include
2 #include
3 #include
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){
16 close(fd[1]);
17 n = read(fd[0],line,56);
18 if(n > 0){
19 printf("%sn",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 worldn");
28 x--;
29 sleep(1);
30 }
31 return 0;
32 }
33 return 0;
34 }
35
以上代码,没问题,如果我把子进程里的 x-- 去掉,父进程就会一直阻塞,请问为什么?因为子进程执行不完的原因吗?父进程没有从管道读取56个字符码?为什么没输出来?
|
感觉是标准IO库写pipe时是全缓存的....
子进程会一直到最后全写完发会真正发送到pipe的读端
你可以在子进程里加fflush(stdout)看一下
子进程会一直到最后全写完发会真正发送到pipe的读端
你可以在子进程里加fflush(stdout)看一下