下表列出了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() )重新建立對映 |