POSIX 进程间通信 (Interprocess Communication, IPC) 是 System V 进程间通信的变体。它是在 Solaris 7 发行版中引入的。与 System V 对象类似,POSIX IPC 对象的属主、属主的组以及其他用户具有读取和写入权限,但是没有执行权限。POSIX IPC 对象的属主无法将对象分配给其他属主。POSIX IPC 包括以下功能:
消息允许进程将已格式化的数据流发送到任意进程。
信号量允许进程同步执行。
共享内存允许进程共享其部分虚拟地址空间。
与 System V IPC 接口不同,POSIX IPC 接口均为多线程安全接口。
下表中列出了 POSIX 消息队列接口。
表 7-2 POSIX 消息队列接口
|
POSIX 信号量比 System V 信号量轻得多。POSIX 信号量结构定义单个信号量,而不是定义最多包含 25 个信号量的数组。
POSIX 信号量接口如下所示。
连接到以及(可选)创建命名信号量
初始化信号量结构(在调用程序内部,因此不是命名信号量)
结束到开放式信号量的连接
结束到开放式信号量的连接,并在最后一个进程关闭此信号量时将其删除
初始化信号量结构(在调用程序内部,因此不是命名信号量)
将信号量的值复制到指定整数中
当其他进程拥有信号量时进行阻塞,或者当其他进程拥有信号量时返回错误
递增信号量计数
POSIX 共享内存实际上是映射内存的变体(请参见创建和使用映射)。二者的主要差异在于:
打开共享内存对象应使用 shm_open(3RT),而不是通过调用 open(2)。
关闭和删除对象应使用 shm_unlink(3RT),而不是通过调用 close(2),此调用不删除对象。
shm_open(3RT) 中的选项数实际上少于 open(2) 中提供的选项数。