Skip to content
On this page

IPC:管道


标签:linux/进程  

管道

Linux文件类型 中有一种管道文件,类型为 p ( pipeline )。它可以实现进程间的通信。

管道文件和普通文件的操作非常相似,但差别在于:使用管道不需要在编程的时候考虑文件中的偏移量,因为管道文件在接受输入后是自动输出的。(可以像标准输入和标准输出一样使用)。

其中无名管道可以可以用于有亲缘关系的进程间的通信,有名管道可以实现无亲缘关系的进程间的通信。

历史上,管道都是半双工的(即单向的通信),但是现在的操作系统提供全双工管道,为了移植性,不能预设系统支持全双工管道[^1]。

invert

*图片摘自『UNIX 环境高级编程』第15章

管道的读写规则

1. 读端存在,写管道

管道空闲,则写入数据;管道满(管道的容量是 65536),写管道则阻塞。

2. 读端不存在,写管道

此时写管道没有意义,内核会发送 SIGPIPE 信号,杀死写管道进程。

3. 写端存在,读管道

  1. 管道中有数据 >= 要求读取数据:读取要求大小的数据;
  2. 管道中有数据 < 要求读取数据:读取管道中实际大小数据;
  3. 管道中没有数据,则读管道阻塞

4. 写端不存在,读管道

管道中有数据,读取数据,管道中没有数据,读管道不阻塞,立即返回0

[^1]: 『UNIX 环境高级编程』第 15 章 进程间通信 第 15.2 小节 管道

Last updated: