只说相关函数和理论 具体实现建议自行尝试或者详细文章 这里推荐下”一只大喵咪1201“
说这三个的前提就是要先了解什么时进程间通信
什么是进程间通信
进程间通信就是两个及其往上的进程有着以下的行为
数据传输:一个进程传数据给另一个进程
资源共享:共享同一块资源
进行通知:一个进程给另一个进程发消息
进程控制:一个进程控制另一个进程
进程通信存在的原因
为了大家(进程)更好的完成任务
如何通信
管道:匿名管道 命名管道
本地通信:共享内存 消息队列 信号量
跨主机通信:共享内存 消息队列 信号量 互斥量 条件变量 读写锁
今天主要说标题三个
匿名管道:
本质:管道并不是一块具体的空间 只是一个代名词(本质是个文件) 而这块空间就是内核缓冲区(与磁盘大小无关)
工作方式:半双工 一方只能读 另一方只能写
创建方式:先创建一个俩大小的文件描述符数组 创建完父进程后 创建管道文件 父进程进行读写 然后创建子进程 子进程进行读写 父进程关闭读端 子进程关闭写段 常用函数pipe
注意:
写段关闭后 read返回0 读端关闭后 write产生SIGPIPE自行退出
哪端快阻塞在哪
常用于父子进程通信(有血缘)
无连接时自行销毁(随生命周期)
不可以传地址(无法映射) 不限读写个数
命名管道:
本质和工作方式无区别 主要用于无血缘进程通信 常用函数mkfifo
注意:
哪端打开而另一端没打开阻塞在哪
其他和匿名基本无区别