pipe 父子进程间通过管道通信 linux系统编程

it2023-03-13  73

通过管道通信,一定是单向的,一个是写端,一个是读端

#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<sys/types.h> #include<string.h> int main() { int fd[2]; pid_t pid; int ret =pipe(fd);// fd[0]代表读端,fd[1]代表写端 if(ret==-1) { perror("pipe error!"); exit(1); } pid=fork(); if(pid==-1) { perror("fork error!"); exit(1); } else if(pid==0) { sleep(2); close(fd[1]);//子进程关闭写端 char buf[1024]; ret= read(fd[0],buf,sizeof(buf));//从管道中读数据 printf("ret=%d\n",ret); if(ret>0) printf("Read by %dchild\n",getpid()); write(STDOUT_FILENO,buf,ret);//输出 } else { close(fd[0]);//父进程关闭读端 char buf1[1024]="hello pipe\n"; write(fd[1],buf1,strlen(buf1));//从管道中写数据 printf("parent write to pipe\n"); while(1); } return 0; }

结果如下:

最新回复(0)