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()
,命令(ipcs
,ipcrm
)來執行狀態/控制操作。
共享內存對象可以使用系統調用(如fstat(),fchmod()
System V共享內存段的大小在創建時是固定的(通過shmget()
)
可以使用ftruncate()
來調整底層對象的大小,然後使用munmap()
和mmap()
(或Linux專用的mremap()
)重新創建映射