高级进程间通信:FIFOs与简单消息接口
1. 引言
在进程间通信(IPC)中,之前我们了解到可以使用管道连接两个相关进程,且管道需在其中一个进程创建前创建,因为文件描述符只能通过继承使用。但在实际场景中,服务器持续运行,客户端不断连接和断开,这种方式限制较大。我们需要更灵活的连接设置、对信息流更强的控制(如队列和优先级),以及在大量数据通信时更高的效率。
如今的UNIX系统提供了多种IPC机制,如命名管道(FIFOs)、消息队列、信号量和文件锁、共享内存和套接字等。本文将介绍在单个系统内传递数据的IPC机制,套接字相关内容后续再讲。为便于初学者理解,我们以单个服务器与多个客户端交换消息为例,引入简单消息接口(SMI),并使用不同的IPC机制实现它,帮助你选择适合自己应用的机制。
选择最佳IPC机制有三个维度:
- 方便使用且符合应用需求
- 具有可移植性
- 高效
2. FIFOs(命名管道)
FIFOs结合了普通文件和管道的特点。它有名称,任何具有适当权限的进程都可打开进行读写,不同进程间可通过FIFOs通信,无需依赖文件描述符的继承。打开后,FIFOs更像管道,遵循管道的行为规则。
通常,以读模式打开FIFOs时,会等待以写模式打开(通常由另一个进程完成);以写模式打开时,会等待以读模式打开。这使得进程在实际数据传输前可以同步。
若在打开时设置了 O_NONBLOCK 标志,以读模式打开会立即返回(带有打开的文件描述符),无需等待写操作;若没有读者打开FIFOs,以写模式打开会返回 -1,并将 errno
超级会员免费看
订阅专栏 解锁全文
2

被折叠的 条评论
为什么被折叠?



