Appearance
管道
Linux文件类型 中有一种管道文件,类型为 p ( pipeline )。它可以实现进程间的通信。
管道文件和普通文件的操作非常相似,但差别在于:使用管道不需要在编程的时候考虑文件中的偏移量,因为管道文件在接受输入后是自动输出的。(可以像标准输入和标准输出一样使用)。
其中无名管道可以可以用于有亲缘关系的进程间的通信,有名管道可以实现无亲缘关系的进程间的通信。
历史上,管道都是半双工的(即单向的通信),但是现在的操作系统提供全双工管道,为了移植性,不能预设系统支持全双工管道[^1]。

*图片摘自『UNIX 环境高级编程』第15章
管道的读写规则
1. 读端存在,写管道
管道空闲,则写入数据;管道满(管道的容量是 65536),写管道则阻塞。
2. 读端不存在,写管道
此时写管道没有意义,内核会发送 SIGPIPE 信号,杀死写管道进程。
3. 写端存在,读管道
- 管道中有数据 >= 要求读取数据:读取要求大小的数据;
- 管道中有数据 < 要求读取数据:读取管道中实际大小数据;
- 管道中没有数据,则读管道阻塞
4. 写端不存在,读管道
管道中有数据,读取数据,管道中没有数据,读管道不阻塞,立即返回0。
[^1]: 『UNIX 环境高级编程』第 15 章 进程间通信 第 15.2 小节 管道