下面是一个简单的例子:#include #include #include #include #include intmain(){intn,fd[2];pid_tpid;charbuffer[BUFSIZ+1];if(pipe(fd)<0){printf("pipefailed!\n");exit(1);}if((pid=fork())<0){printf("forkfailed!\n");exit(1);}elseif(pid>0){close(fd[0]);inti;char*words="Howareyou?";sleep(1);for(i=0;i<5;i++){write(fd[1],words,strlen(words));}}else{close(fd[1]);while((n=read(fd[0],buffer,BUFSIZ))>0){strcat(buffer,"---\n");write(STDOUT_FILENO,buffer,strlen(buffer));}}exit(0);}输出结果是:Howareyou?Howareyou?Howareyou?Howareyou?Howareyou?---希望的结果是:Howareyou?---Howareyou?---Howareyou?---Howareyou?---Howareyou?---为什么子进程只读了一次,而不是主进程每写一次读一次。再问一点其他的,主进程跟子进程的执行速度是不一致的吧,会不会出现主进程写入的时候子进程还没有close(fd[0]);建立管道这种情况,是不是需要子进程向主进程应答一下表示我已经准备好了。
至尊宝的传说
慕慕森
相关分类