首先看看下面这行代码:
#include <stdio.h> #include <unistd.h> #include <sys/wait.h> #include <sys/types.h> int main() { int pipefd[2]; int pfd = pipe(pipefd); char buf[20]; int ffd = fork(); memset(buf,0,sizeof(buf)); if(ffd>0) { close(pipefd[0]); sleep(5); write(pipefd[1],"hello",sizeof("hello")); printf("write finished\n"); close(pipefd[1]); // wait(NULL); } else { close(pipefd[1]); // sleep(5); read(pipefd[0],buf,sizeof(buf)); printf("read over\n"); close(pipefd[0]); } printf("buf:%s,pid=%d,ppid=%d\n",buf,getpid(),getppid()); sleep(2); return 0; }
运行上面一段代码可以观察管道读写同步的过程
会发现在 ,read等待写操作,但写不用等待读面直接结束进程。