- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第1-4章进程间通信
下载
下载
第1 4章 进程间通信
14.1 引言
第8章说明了进程控制原语并且观察了如何调用多个进程。但是这些进程之间交换信息的
唯一方法是经由f o r k或e x e c传送打开文件,或通过文件系统。本章将说明进程之间相互通信的
其他技术—I P C (InterProcess Communication )。
UNIX IPC 已经是而且继续是各种进程通信方式的统称,其中极少能在所有 U N I X 的实现中
进行移植。表 1 4 - 1列出了不同实现所支持的不同形式的I P C 。
表14-1 UNIX IPC
I P C类型
管道(半双工)
F I F O s(命令管道)
流管道(全双工)
命令流管道
消息队列
信号量
共享存储
套接口
流
正如上表所示,不管哪一种U N I X 实现,都可依靠的唯一一种I P C是半双工的管道。表中前
7种I P C通常限于同一台主机的各个进程间的 I P C 。最后两种;套接口和流,则支持不同主机上
各个进程间I P C (关于网络I P C 的详细情况,请参见S t e v e n s 〔1 9 9 0〕)。虽然中间三种形式的I P C
(消息队列、信号量以及共享存储器)在表中说明为只受到系统V 的支持,但是在大多数制造
商所支持的,从伯克利U N I X 导出的U N I X系统中(例如,S u n O S 以及U l t r i x ),已经添加了这三
种形式的I P C 。
几个P O S I X 小组正在对I P C进行工作,但是最后结果还不很清楚,可能要到
1 9 9 4年甚至更迟一点与I P C有关的P O S I X才能制定出来。
我们将与I P C有关的讨论分成两章。本章将讨论经典的 I P C ;管道、F I F O 、消息队列、信
号量以及共享存储器。下一章将观察 S V R 4和4 . 3 + B S D共同支持的I P C 的某些高级特征,包括;
流管道和命名流管道,以及用这些更高级形式的 I P C可以做的一些事情。
14.2 管道
管道是UNIX IPC的最老形式,并且所有U N I X系统都提供此种通信机制,管道有两种限制;
(1) 它们是半双工的。数据只能在一个方向上流动。
(2) 它们只能在具有公共祖先的进程之间使用。通常,一个管道由一个进程创建,然后该
第 1 4章 进程间通信 3 2 1
下载
进程调用f o r k ,此后父、子进程之间就可应用该管道。
我们将会看到流管道(见 1 5 . 2节)没有第一种限制,F I F O (见1 4 . 5节)和命名流管道(见
1 5 . 5节)则没有第二种限制。尽管有这两种限制,半双工管道仍是最常用的 I P C形式。
管道是由调用p i p e 函数而创建的。
#include <unistd.h>
f i l e d e s [ 2 ] ) ;
int pipe(int
返回:若成功则为 0,若出错则为- 1
经由参数f i l e d e s 返回两个文件描述符:f i l e d e s [ 0 ] 为读而打开,f i l e d e s [ 1 ] 为写而打开。f i l e d e s [ 1 ]
的输出是f i l e d e s [ 0 ] 的输入。
有两种方法来描绘一个管道,见图 1 4 - 1。左半图显示了管道的两端在一个进程中相互连接,
右半图则说明数据通过内核在管道中流动。
在S V R 4下,管道是双全工的。两个描述符都可用于读、写。于是,图 1 4 - 1中
的箭头在两端都有。我们称这种全双工管道为“流管道”,下一章将详细讨论这种
管道。因为P O S I X . 1 只提供半双工管道,为了可移植性
文档评论(0)