本节书摘来自异步社区《UNIX网络编程 卷2:进程间通信(第2版)》一书中的第1章,第1.9节,作者:【美】W. Richard Stevens著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.9 小结
IPC传统上是Unix中一个杂乱不堪的领域。虽然有了各种各样的解决办法,但没有一个是完美的。我们的讨论分成4个主要领域:
(1)消息传递(管道、FIFO、消息队列);
(2)同步(互斥锁、条件变量、读写锁、信号量);
(3)共享内存区(匿名共享内存区、有名共享内存区);
(4)过程调用(Solaris门、Sun RPC)。
我们考虑单个进程中多个线程间的IPC以及多个进程间的IPC。
各种类型IPC的持续性可以是随进程持续的、随内核持续的或随文件系统持续的,这取决于IPC对象存在时间的长短。在为给定的应用选择所用的IPC类型时,我们必须清楚相应IPC对象的持续性。
各种类型IPC的另一个特性是名字空间,也就是使用IPC对象的进程和线程标识各个IPC对象的方式。各种类型的IPC有些没有名字(管道、互斥锁、条件变量、读写锁),有些具有在文件系统中的名字(FIFO),有些具有将在第2章中讲述的Posix IPC名字,有些则具有其他类型的名字(将在第3章中讲述的System V IPC键或标识符)。典型做法是:服务器以某个名字创建一个IPC对象,客户则使用该名字访问同一个IPC对象。
本书中所有源代码使用1.6节中讲述的包裹函数来缩短篇幅,同时达到检查每个函数调用是否返回错误的目的。我们的包裹函数都以一个大写字母开头。
IEEE Posix标准一直是多数厂家努力遵循的标准,其中Posix.1定义了访问Unix的基本C接口,Posix.2定义了标准命令。然而商业标准也在迅速地吸纳并扩展Posix标准,著名的有Open Group的Unix标准,例如Unix 98。