第14章 进程间通信.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第14 章 进程间通信 进程间通信 IPC(Interprocess Communication)是在 Linux/UNIX 下编程经常会碰到的 问题,它的实际意义在于怎么样让多个进程可以互相的访问数据。在 Linux/UNIX 环境下 可以由多种方式来实现上述的问题,接下来将详细为读者介绍这几种方式的具体操作以及 相关内容。 14.1 进程间通信概述 进一个大型的应用系统,往往需要众多进程协作,进程间通信的重要性显而易见。本 章阐述了 Linux 环境下的几种主要进程间通信手段,并针对每个通信手段的关键技术环节 给出详细实例。为达到阐明问题的目的,本章还对某些通信手段的内部实现机制进行了 分析。 14.1.1 进程间通信简介 在早期,UNIX 系统 IPC 就是进程间通信方式的统称,进程间通信就是可以让多个进 程可以互相之间访问。这种访问包括程序运行的适时数据,也包括对方的代码段,这是在 实际应用中及其常见的问题,进程间通信示意图如图 14-1 所示。 图 14-1 进程间通信简介 第 14 章 进程间通信 上图所示进程间通信的模式,进程 A 和进程B 在运行的过程中会需要一些外部的数据, IPC 为两个进程提供了一种数据传输的通道。 14.1.2 进程间通信的难点 由于现在应用程序的体积逐渐增大,用户对软件的功能要求也越来越多,所以多进程 设计已经是应用技术中不可缺少的一部分,这同时也对进程间通信提出了挑战。 进程运行期间,其地址空间对于其他进程是不可见的(这只是传统上的进程概念,在 本章后续章节中 IPC 内存共享机制打破了这个概念),在系统中它们是相对独立的,并不 能互相访问对方,如图 14-2 所示。 图 14-2 进程在内存中的地址 Linux/UNIX 系统提供一种中间转发的机制,为多个进程建立起互相通信的数据通道。 在上述问题中,当进程 A 与进程 B 通信时,通过中间的 IPC 方式来转发数据到目标进程。 14.1.3 IPC 的多种方式 Linux/UNIX 系统下,进程间通信方式有着比较多的应用技术。进程间通信方式从最简 单的使用文件系统实现多进程共享文件数据、以及父子进程共享数据段,到高级应用的管 道以及共享内存、信号灯。 IPC 是所有 UNIX 系统中各种进程间通信的统称,如表 14-1 所示,列出了所有进程间 通信的方式。 表14-1 IPC类型 IPC 类型 详 细 说 明 半双工管道 半双工管道: 匿名半双工管道 FIFO(First In First Out 命名半双工管道) 全双工管道: 匿名全双工管道 命名全双工管道 System V IPC / POSIX IPC 消息队列 信号量 共享存储 网络进程间通信 SOCKET STREAMS ·417· Linux C 程序设计大全 上表内容中,全双工管道是在最近才出现的一种技术,它是在半双工管道上的扩充, 在有的系统中是不被支持的,在实际应用的过程中请参阅相应的系统手册。 注意:其余的技术中,在不同的系统中会有不同的限制,以及不同的特点。本书只描述 它们共有的特性。如需特别需求,请参阅相应的系统手册。 14.2 管 道 管道通信是最常见的通信方式之一,其是在两个进程之间实现一个数据流通的管道, 该管道可以是双向或单向的。管道是一种很经典的进程之间的通信方式,其优点在于简单 易用,其缺点在于功能简单,有很多限制。本小节主要介绍管道操作。 14.2.1 管道的概念 管道是 Linux/UNIX 系统中比较原始的进程间通信形式,它实现数据以一种数据流的 方式,在多进程间流动。在系统中其相当于文件系统上的一个文件,来缓存所要传输的数 据。在某些特性上又不同于文件,例如,当数据读出后,则管道中就没有数据了,但文件 没有这个特性。 匿名半双工管道在系统中是没有实名的,并不可以在文件系统中以任何方式看到该管 道。它只是进程的一种资源,会随着进程的结束而被系统清除。管道通信是在 UNIX 系统 中应用比较频繁的一种方式,例如使用 grep 查找。 # ls | grep ipc 上述命令中使用的是半双工管道,即 grep 命令的输入是 ls 命令的输出。管道从数据流 动方向上又分全双工管道以及半双工管道,当然全双工管道现在某些系统还不支持,其在 具体的实现过程中也只是在文件打开的方式上有一点区别(在操作规则上也有一些不同, 全双工管道要相比半双工复杂的多)。 14.2.2 匿名半双工管道 匿名管道没有名字,对于管道中使用的文件描述符没有路径名,也就是不存在任何意 义上的文件,它们只是在内存中跟某一个索引节点相关联的两个文件描述符。匿名半双工 管道的主要特性如下: ? 数据只能在一个方向上移动。 ? 只能在具有公共祖先的进程间通信,即或是父子关系进程间、或

文档评论(0)

158****6415 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档