没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Linux C 程序设计大全
进程间通信 ()是在 下
编程经常会碰到的问题,它的实际意义在于怎么样让多个进程可以互相的访问
数据。在 环境下可以由多种方式来实现上述的问题,接下来将详
细为读者介绍这几种方式的具体操作以及相关内容。
14.1 进程间通信概述
进一个大型的应用系统,往往需要众多进程协作,进程间通信的重要性显
而易见。本章阐述了 环境下的几种主要进程间通信手段,并针对每个通
信手段的关键技术环节给出详细实例。为达到阐明问题的目的,本章还对某些
通信手段的内部实现机制进行了 分析。
14.1.1 进程间通信简介
在早期, 系统 就是进程间通信方式的统称,进程间通信就是可以
让多个进程可以互相之间访问。这种访问包括程序运行的适时数据,也包括对
方的代码段,这是在实际应用中及其常见的问题,进程间通信示意图如图
所示。
图 进程间通信简介
上图所示进程间通信的模式,进程 和进程 在运行的过程中会需要一些
外部的数据, 为两个进程提供了一种数据传输的通道。
14.1.2 进程间通信的难点
由于现在应用程序的体积逐渐增大,用户对软件的功能要求也越来越多,
所以多进程设计已经是应用技术中不可缺少的一部分,这同时也对进程间通信
提出了挑战。
进程运行期间,其地址空间对于其他进程是不可见的(这只是传统上的进
程概念,在本章后续章节中 内存共享机制打破了这个概念),在系统中它
们是相对独立的,并不能互相访问对方,如图 所示。
图 进程在内存中的地址
系统提供一种中间转发的机制,为多个进程建立起互相通信的
数据通道。在上述问题中,当进程 与进程 通信时,通过中间的 方式来
转发数据到目标进程。
14.1.3 IPC 的多种方式
系统下,进程间通信方式有着比较多的应用技术。进程间通信
方式从最简单的使用文件系统实现多进程共享文件数据、以及父子进程共享数
据段,到高级应用的管道以及共享内存、信号灯。
是所有 系统中各种进程间通信的统称,如表 所示,列出了
所有进程间通信的方式。
表 14-1 IPC 类型
类型 详 细 说 明
半双工管道
半双工管道: 匿名半双工管道 命名半双工管
道!
全双工管道: 匿名全双工管道 命名全双工管道
"#$"
消息队列 信号量 共享存储
网络进程间通信
"%&'"'(&)"
上表内容中,全双工管道是在最近才出现的一种技术,它是在半双工管道上的扩充,在有
的系统中是不被支持的,在实际应用的过程中请参阅相应的系统手册。
*注意:其余的技术中,在不同的系统中会有不同的限制,以及不同的特点。本书只描述
它们共有的特性。如需特别需求,请参阅相应的系统手册。
14.2 管 道
管道通信是最常见的通信方式之一,其是在两个进程之间实现一个数据流
通的管道,该管道可以是双向或单向的。管道是一种很经典的进程之间的通信
方式,其优点在于简单易用,其缺点在于功能简单,有很多限制。本小节主要
介绍管道操作。
14.2.1 管道的概念
管道是 系统中比较原始的进程间通信形式,它实现数据以一
种数据流的方式,在多进程间流动。在系统中其相当于文件系统上的一个文件,
来缓存所要传输的数据。在某些特性上又不同于文件,例如,当数据读出后,
则管道中就没有数据了,但文件没有这个特性。
匿名半双工管道在系统中是没有实名的,并不可以在文件系统中以任何方
式看到该管道。它只是进程的一种资源,会随着进程的结束而被系统清除。管
道通信是在 系统中应用比较频繁的一种方式,例如使用 + 查找。
,-.+
上述命令中使用的是半双工管道,即 + 命令的输入是 - 命令的输出。
管道从数据流动方向上又分全双工管道以及半双工管道,当然全双工管道现在
某些系统还不支持,其在具体的实现过程中也只是在文件打开的方式上有一点
区别(在操作规则上也有一些不同,全双工管道要相比半双工复杂的多)。
14.2.2 匿名半双工管道
匿名管道没有名字,对于管道中使用的文件描述符没有路径名,也就是不
存在任何意义上的文件,它们只是在内存中跟某一个索引节点相关联的两个文
件描述符。匿名半双工管道的主要特性如下:
/数据只能在一个方向上移动。
/只能在具有公共祖先的进程间通信,即或是父子关系进程间、或是在兄弟
关系进程间通信。
尽管有如此限制,半双工管道还是最常用的通信方式。 环境下使用
函数创建一个匿名半双工管道,其函数原型如下:
,-010234
5067!8
参数 5067为一个长度为 的文件描述符数组,50697是读出端,5067
是写入端,函数的返回值为 9 表示成功,– 表示失败。当函数成功返回,则自
动维护了一个从 5067到 50697的数据通道。
下面实例演示了如何使用 函数创建管道以及关闭管道。程序中先使用
函数 建立管道,并使用管道传输数据,在程序的结束部分,释放掉管道占
用的文件资源(两个文件描述符),具体实现如下。
()在 : 编辑器中编辑以下程序:
程序清单 ;2管道的打开以及关闭操作
,-010234
,-010234
,-010-<234
:0!
=
50678
>
管道的文件描述符数组
>
36?@78
5 50!!19!=
AA!8
!8
B
C 5067DA35--#EFADG!8
>
向管道写入端写入数据
>
0 50697DDH5 !!8
>
从管道读出端读出数据
>
5 A*AD!8
5 AI-0*0D*0FAD50697D5067!8
- 50697!8
>
关闭管道的读入文件描述符
>
- 5067!8
>
关闭管道的读出文件描述符
>
98
B
()在 3-- 中编译该程序如下:
J+;2K;
(G)在 3-- 中运行该程序如下:
剩余63页未读,继续阅读
资源评论
- housansansan12013-03-12太好了 终于找到了
tianbianlan
- 粉丝: 3
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功