- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
下载
第1 5章 高级进程间通信
15.1 引言
上一章说明了各种U N I X系统提供的I P C经典方法,包括 :管道、F I F O 、消息队列、信号量
和共享存储。本章介绍某些高级的 I P C 以及它们的应用方法,包括:流管道和命名流管道。使用
这些机制,可以在进程间传送打开文件描述符。在分别为每一个客户进程提供一个通道的系统
中,这些通信机制使客户进程能与精灵服务进程会合。 4 . 2 B S D和S V R 3 . 2最早提供这些高级形
式的I P C ,但是至今尚未广泛使用,也缺少参考文献。本章中很多思想来自 P r e s s o t t o和R i t c h i e
〔1 9 9 0〕的论文。
15.2 流管道
流管道是一个双向(全双工)管道。单个流管道就能向父、子进程提供双向的数据流。图
1 5 - 1显示了观察流管道的两种方式。它与图 1 4 - 1的唯一区别是双向箭头连线,因为流管道是全
双工的。
用户进程 用户进程
或
流管通
内核
图15-1 观察流管道的两种方式
实例
下面用一个流管道再次实现了程序 1 4 - 9的协作进程实例。程序 1 5 - 1是新的m a i n 函数。a d d 2
协作进程与程序 1 4 - 8中的相同。程序1 5 - 1调用了创建一个流管道的新函数 s _ p i p e 。(下面将说明
该函数的S V R 4和4 . 3 + B S D版本。)
程序15-1 用流管道驱动a d d 2过滤进程的程序
3 5 6 U N I X环境高级编程
下载
父程序只使用f d [ 0 ] ,子程序只使用fd[1] 。因为流管道的每一端都是全双工的,所以父进程读、
写f d [ 0 ] ,而子程序将f d [ 1 ]复制到标准输入和标准输出。图 1 5 - 2显示了由此构成的描述符。
第 1 5章 高级进程间通信 3 5 7
下载
s _ p i p e函数定义为与标准p i p e 函数类似。它的调 父进程 子进程(协作进程)
用参数与p i p e相同,但返回的描述符以读 -写方式打
开。
实例—S V R 4下的s _ p i p e 函数
图15-2 为协作进程安排的描述符
程序 1 5 - 2是s _ p i p e函数的S V R 4版本。它只是调
用创建全双工管道的标准p i p e 函数。
程序15-2 s_pipe函数的S V R 4版本
在系统V 的早期版本中也可以创建流管道,但要进行的处理较多。有关在
S V R 3 . 2下创建流管道的详细情况,请参阅S t e v e n s 〔1 9 9 0〕。
图1 5 - 3显示了S V R 4之下管道的基本结构。它
用户进程
主要是两个相互连接的流首。
因为管道是一种流设备,故可将处理模块压
入管道的任一一端。 1 5 . 5 . 1节将用此技术提供一个
可以装配的命名管道。
实例—4 . 3 + B S D之下的s _ p i p e 函数 流首 流首 内核
程序1 5 - 3是s _ p i p e 函数的B S D版本。此函数在
4 . 2 B S D
文档评论(0)