一、概念
我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”,其本质时内核中的一块缓冲区。
二、特性
1.半双工通信。管道是双向选择,单向通信。
2.读写特性。
如果管道中没有数据,则read会阻塞;如果管道中数据满了,则write会阻塞;
如果管道所有写端关闭,则read读完之返回0而不是阻塞;如果所有读端关闭,则write写完后触发异常退出而不是阻塞。
3.管道自带同步与互斥。
同步:保证数据操作的合理性,时序可控,即我操作完了别人才能操作;
互斥:保证数据操作的时间唯一访问性,即我操作的时候别人不能操作。
(注:管道的操作大小小于PIPE_BUF时,可以保证操作原子性)
4.管道的生命周期随进程,进程生命周期结束则管道生命周期也结束
5.管道提供字节流服务:传输灵活,但是会造成数据粘连没有边界
6.管道仅能用于具有亲缘关系的进程间通信,因为子进程需要通过复制父进程获取管道操作句柄。
三、匿名管道