进程间通信之:管道

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()函数逐

个关闭各个文件描述符。

注意

相关文档
最新文档