进程间通信之:管道
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进程间通信之:管道
8.2 管道8.2.1 管道概述本书在第2 章中介绍ps 的命令时提到过管道,当时指出了管道是Linux 中一种很重要的通信方式,它是把一个程序的输出直接连接
到另一个程序的输入,这里仍以第2 章中的ps–ef|grepntp 为例,描述管
道的通信过程,如图8.2 所示。
图8.2 管道的通信过程
管道是Linux 中进程间通信的一种方式。这里所说的管道主要指无名管道,
它具有如下特点。
n 它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进
程之间)。
n 它是一个半双工的通信模式,具有固定的读端和写端。
n 管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read()和write()等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只
存在于内核的内存空间中。
8.2.2 管道系统调用1.管道创建与关闭说明管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fds[0]和fds[1],其中fds[0]
固定用于读管道,而fd[1]固定用于写管道,如图8.3 所示,这样就构成了一个
半双工的通道。
图8.3Linux 中管道与文件描述符的关系
管道关闭时只需将这两个文件描述符关闭即可,可使用普通的close()函数逐
个关闭各个文件描述符。
注意