▋1。pipe的概念Pipeline,又称“无名管理”,或“匿名管道”,pipe是一种非常基础且经常使用的IPC方式。1.1管道的本质管道的本质也是一种文件,只不过是一个伪文件,实际上是一个大小为4K的内核缓冲区;创建管道后,会生成两个文件描述符,一个是读端,一个是写端;管道中的数据只能从写端写入,从读端读取;1.2管道原理管道是内核的一个缓冲区,更具体地说,它是一个循环队列。数据从队列的一端写入,从另一端读取,如下图所示:1.3管道的优点是简单1.4管道的缺点只能是单向通信。如果需要双向通信,需要建立两条管道;它只能应用于有血缘关系的人关系过程,例如亲子过程;缓冲区大小有限,一般为1页,即4k;▋2。管道创建管道创建的三个步骤:a.父进程调用管道函数创建管道;b.父进程调用fork函数创建子进程;C。父进程关闭fd[0],子进程关闭fd[1];具体如下图所示:▋3.管道的读写行为a.管道的缓冲区大小固定为4k,所以如果管道中的数据已满,则无法再写入数据,进程的write调用将阻塞,直到有足够的空间写入数据;b.管道的读动作比写动作快,一旦数据被读出,管道就会释放相应的空间用于后续的数据写入。读取完所有数据后,进程的read()调用将阻塞,直到再次写入数据。▋4。例程间的父子通信:1#include2#include3#include4#include56intmain()7{8intfd[2];9pid_tpid;10charbuf[1024];11char*data="helloworld!";1213/*创建管道*/14if(pipe(fd)==-1){15printf("ERROR:pipe创建失败!\n");16return-1;17}1819pid=fork();20if(pid==0){21/*子进程*/22close(fd[1]);//子进程读取数据,关闭写端口23read(fd[0],buf,sizeof(buf));//从管道读取数据24printf("childprocessread:%s\n",buf);25close(fd[0]);26}elseif(pid>0){27/*parentprocess*/28关闭(fd[0]);//父进程写入数据,关闭读端29write(fd[1],data,strlen(data));//向管道写入数据30printf("parentprocesswrite:%s\n",data);31close(fd[1]);32}3334return0;35}兄弟间通信:1#include2#include3#include4#include5#include67intmain()8{9intfd[2];10inti=0;11pid_tpid;12charbuf[1024];13char*data="helloworld!";1415/*创建管道*/16if(pipe(fd)==-1){17printf("错误:管道创建失败!\n");18return-1;19}2021for(i=0;i<2;i++){22pid=fork();23if(pid==-1){24printf("ERROR:forkerror!\n");25return-1;26}elseif(pid==0){27break;28}29}3031/*通过i判断创建的子进程和父进程*/32if(i==0){33/*第一个子进程,兄弟进程*/34close(fd[0]);//老进程写数据给小进程,关闭读端35write(fd[1],data,strlen(data));36printf("大哥send:%s\n",data);37close(fd[1]);38}elseif(i==1){39/*第二个子进程,兄弟进程*/40close(fd[1]);41read(fd[0],buf,sizeof(buf));42printf("小弟接收:%s\n",buf);43close(fd[0]);44}else{45/*父进程*/46close(fd[0]);47close(fd[1]);48for(i=0;i<2;i++){49wait(NULL);50}51}5253return0;54}更多精彩内容,敬请关注公众号梁旭Linux,在公众号回复1024免费获得5T技术资料,包括:Linux、C/C++、Python、树莓派、嵌入式、Java、人工智能等云技术交流群。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以加入我的行列,把这本电子书做得更加完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站