进程通信目的
为什么要进行进程通信?
进行数据传输
资源共享
通知事件
进程控制
进程间通信发展
管道(分为匿名和有名)
systemv进程间通信:一台机器内
posix:跨网络通信
systemVIPC进程通信标准,确立标准
进程间通信是怎么做的,本质问题?
我们知道进程是有独立性的
所以首先要让这俩看到同一份资源
这个可以由os提供的系统调用来,这二个就是由我们上面说的标准来定
我们该怎么办才可以实现这个?
匿名管道-》没有名字?为什么?
1.直接说通信原理
管道:基于文件,进行内核级进程通信,但是这个只能进行单项通信
细节一:fork时,file要进行拷贝
2.单向通行,也叫做单工通信(要么父亲给孩子写,要么孩子给父亲写)
全双工:互相发
半双工:一方给另一方,一方说,一方听,这个可以换过来
单工:只能一方说,一方听
管道:我们不需要路径和文件名,所以我们这里叫匿名管道
细节三:是内存级,不用打开磁盘文件,不要路径
我们这里管道是可以任意关闭读写权限的,但是不建议这样做
创建管道
pipe:创建一个管道

他有两个输出型参数
接下来是代码展示


总结
匿名管道特性与情况说明
五种特性
1.单向通信,单工通信
2.匿名管道只能进行父子间的通信(因为继承了内核资源)(有血缘关系的都可以)
3.管道是面向字节流的,也就是随意读取字节
4.管道的生命周期随进程,当父子进程都结束,管道也消除了
5.管道通信对多进程而言,是自带互斥与同步机制的
四种情况
1.自己成写的慢,父进程就会阻塞,等待管道有数据之后,父进程才开始读
管道通信,前提是让不同的进程看同一份资源,父子会进行共享资源,这就会导致一个并发访问的问题,所以我们上面说了他又互斥也就是,一个在写的时候另外一个阻塞,同步的意思就是,会存在有个顺序问题
2.子进程写的快,父进程不读,管道(64kb)被写满,子进程会被阻塞
3.读端在读,写端关闭,读完管道里的所有数据,就会读空字符串,此事的返回值会是0
4.写的话一只写,读端不读,os会认为这是在浪费资源,会直接杀死写进程(进程退出信号是13,管道破裂)