System V & Posix

下表列出了System V IPC和POSIX IPC之間的區別。

SYSTEM V

POSIX

AT&T(1983)介紹了IPC設施的三種新形式,即消息隊列,共享內存和信號量。

由IEEE指定的便攜式操作系統接口標準來定義應用程序編程接口(API)。 POSIX涵蓋了所有三種形式的IPC

SYSTEM V IPC涵蓋了所有的IPC機制,即管道,命名管道,消息隊列,信號,信號量和共享內存。 它還涵蓋套接字和Unix域套接字。

幾乎所有的基本概念都與系統V相同。它僅與接口有所不同。

共享內存接口調用shmget()shmat()shmdt()shmctl()

共享內存接口調用shm_open()mmap()shm_unlink()

消息隊列接口調用msgget()msgsnd()msgrcv()msgctl()

消息隊列接口調用mq_open()mq_send()mq_receive()mq_unlink()

信號量接口調用semget()semop()semctl()

信號量接口調用命名信號量sem_open()sem_close()sem_unlink()sem_post()sem_wait()sem_trywait()sem_timedwait()sem_getvalue()未命名或基於內存的信號量sem_init()sem_post()sem_wait ()sem_getvalue()sem_destroy()

使用鍵和標識符來標識IPC對象。

使用名稱和文件描述符來標識IPC對象

NA

可以使用select()poll()和epoll API來監視POSIX消息隊列

提供msgctl()調用

提供函數(mq_getattr()mq_setattr())來訪問或設置屬性

NA

多線程安全。 包含線程同步函數,如互斥鎖,條件變量,讀寫鎖等

NA

爲消息隊列提供少量通知功能(如mq_notify())

需要系統調用如shmctl(),命令(ipcsipcrm)來執行狀態/控制操作。

共享內存對象可以使用系統調用(如fstat(),fchmod()

System V共享內存段的大小在創建時是固定的(通過shmget())

可以使用ftruncate()來調整底層對象的大小,然後使用munmap()mmap()(或Linux專用的mremap())重新創建映射