无名/有名管道都属于文件,存在于内存中,管道通信实则是在对文件进行读写操作 read write
两者都具有管道特性,先进先出,追加写文件,从头读文件并清楚已读内容
无名管道
有名管道
#include
#include
#include
#include int main()
{int pid;int fd[2];char r_buf[128]={0};if((pipe(fd)) == -1){perror("pipe fail");exit(-1);}if((pid = fork()) == -1){perror("fork fail");exit(-1);}if(pic > 0){close(fd[0]);//关闭读端write(fd[1], "hello world",strlen("hello world"));close(fd[1]);}else if(pid == 0){close(fd[1]); //关闭写端read(fd[0], r_buf, 128);printf(fd[0], r_buf);close(fd[0]);}
// gcc demo1.c ./a.outreturn 0;
}
#include
#include
#include
#include int main()
{int fd;int pid;int sum =3;char r_buf[128]={0};if(((mkfifo("file", 0600)) == -1) && (errono != EEXIT)){perror("mkfifo fail");exit(-1);}if((pid = fork()) == -1){perror("fork fail");exit(-1);}if(pid > 0){fd = open("file", O_WRONLY);while(sum){write(fd, "message from fifo", strlen("message from fifo"));sleep(1);//间隔1ssum--;}close(fd);}else if(pid == 0){fd = open("file", O_RDONLY);while(sum){read(fd, r_buf, 128));sleep(1);//间隔1ssum--;}close(fd);}
// gcc demo2.c ./a.outreturn 0;
}