下表列出了System V IPC和POSIX IPC之間的區(qū)別。
| 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來監(jiān)視POSIX消息隊列 |
提供msgctl()調用 |
提供函數(mq_getattr()和mq_setattr())來訪問或設置屬性 |
NA |
多線程安全。 包含線程同步函數,如互斥鎖,條件變量,讀寫鎖等 |
NA |
為消息隊列提供少量通知功能(如mq_notify()) |
需要系統調用如shmctl(),命令(ipcs,ipcrm)來執(zhí)行狀態(tài)/控制操作。 |
共享內存對象可以使用系統調用(如fstat(),fchmod() |
System V共享內存段的大小在創(chuàng)建時是固定的(通過shmget()) |
可以使用ftruncate()來調整底層對象的大小,然后使用munmap()和mmap()(或Linux專用的mremap())重新創(chuàng)建映射 |