LINUX开源通信综合分析

时间:2024-11-21

linux下的过程通讯方式基本上是从Unix平台上的过程通讯方式继承而来的。

对Unix开发的两个主要贡献是AT& T的Bell Labs和BSD(加利福尼亚大学伯克利的Berkeley软件分发中心),它们对进程间的通信有不同的重视。

前者的系统改进并扩展了Unix的早期进程间通信方法,形成了“系统V IPC”,并且通信过程仅限于一台计算机。

后者跳过此限制并形成基于套接字的(基于套接字的接口)。

)进程间通信机制。

Linux继承了两者,如图所示:,原始的Unix IPC包括:管道,FIFO和信号; System V IPC包括:System V消息队列,System V信号量和System V共享内存区域; Posix IPC包括:Posix消息队列,Posix信号量,Posix共享存储区。

有两点需要简要说明:1)由于Unix版本的多样性,电气和电子工程学院(IEEE)开发了一个独立的Unix标准。

这种新的ANSI Unix标准称为计算?童协低陈M(SOIX)。

现有的大多数Unix和流行版本都遵循POSIX标准,而Linux从一开始就遵循POSIX标准。

2)BSD并非在单台机器内没有进程间通信(套接字本身可以在单台机器上的进程之间使用通信)。

实际上,许多Unix版本的独立IPC都有BSD的痕迹,例如4.4BSD支持的匿名内存映射,4.3 + BSD的可靠信号语义实现等。

Linux下几种主要的进程间通信方法介绍:1.管道是最古老的进程间通信方法。

它包括两种未命名的管道和已命名的管道。

前者可用于具有亲属关系的进程之间的通信。

父进程和子进程之间的通信,后者克服了管道没有名称的限制。

因此,除了前者的功能外,它还允许不相关的进程之间进行通信,从而可以在同一台机器上运行任何两个进程之间的通信。

未命名的管道是通过pipe()函数创建的:#include pipeint管道(int filedis);参数filedis返回两个文件描述符:打开filedes [0]进行读取,打开filedes进行写入。

filedes的输出是filedes [0]的输入。

在Linux系统中,可以通过两种方式创建众所周知的管道:命令行方法mknod系统调用和函数mkfifo。

以下两种方式均会在当前目录中生成一个名为myfifo的知名管道:方法1:mkfifo(“ myfifo”,“ rw”);方法2:mknod myfifo p生成众所周知的管道后,可以使用常规文件I / O功能(例如打开,关闭,读取,写入等)对其进行操作。

2.消息队列-消息队列是消息的链接列表,包括Posix消息队列系统V消息队列。

消息队列用于在同一台计算机上运行的进程间通信。

它类似于管道。

具有足够权限的进程可以将消息添加到队列中,而具有读取权限的进程可以读取队列中的消息。

消息队列克服了信号携带较少信息的缺点,管道只能携带未格式化的字节流,并且缓冲区大小有限。

我们可以用流水管或插座代替它。