Ofweek 电子工程网
几种 linux 下的进程通信手段
linux 下的进程通信手段基本上是从 Unix 平台上的进程通信手段继承而来
的。而对 Unix 发展做出重大贡献的两大主力 AT&T 的贝尔实验室及 BSD(加州大
学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前
者对 Unix 早期的进程间通信手段进行了系统的改进和扩充,形成了“system V
IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口
(socket)的进程间通信机制。Linux 则把两者继承了下来,如图示:
其中,最初 Unix IPC 包括:管道、FIFO、信号;System V IPC 包括:System
V 消息队列、System V 信号灯、System V 共享内存区;Posix IPC 包括:Posix
消息队列、Posix 信号灯、Posix 共享内存区。有两点需要简单说明一下:
1)由于 Unix 版本的多样性,电子电气工程协会(IEEE)开发了一个独立的
Unix 标准,这个新的 ANSI Unix 标准被称为计算肪车目梢浦残圆僮飨低辰缑
妫≒SOIX)。现有大部分 Unix 和流行版本都是遵循 POSIX 标准的,而 Linux 从
一开始就遵循 POSIX 标准;
2)BSD 并不是没有涉足单机内的进程间通信(socket 本身就可以用于单机
内的进程间通信)。事实上,很多 Unix 版本的单机 IPC 留有 BSD 的痕迹,如 4.4BSD
支持的匿名内存映射、4.3+BSD 对可靠信号语义的实现等等。
linux 下进程间通信的几种主要手段简介:
1.管道
管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种,前者
可用于具有亲缘关系进程间的通信,即可用于父进程和子进程间的通信,后者额
克服了管道没有名字的限制,因此,除具有前者所具有的功能外,它还允许无亲
缘关系进程间的通信,即可用于运行于同一台机器上的任意两个进程间的通信。
无名管道由 pipe()函数创建:
#include
int pipe(int filedis);
参数 filedis 返回两个文件描述符:filedes[0]为读而打开,filedes 为写
而打开。filedes 的输出是 filedes[0]的输入。
在 Linux 系统下,有名管道可由两种方式创建:命令行方式 mknod 系统调用
和函数 mkfifo.下面的两种途径都在当前目录下生成了一个名为 myfifo 的有名
管道:
方式一:mkfifo(“myfifo”,“rw”);