下表列出了System V IPC和POSIX IPC之間的區(qū)別。
SYSTEM V | POSIX |
---|---|
AT&T(1983)介紹了IPC設(shè)施的三種新形式,即消息隊列,共享內(nèi)存和信號量。 | 由IEEE指定的便攜式操作系統(tǒng)接口標準來定義應(yīng)用程序編程接口(API)。 POSIX涵蓋了所有三種形式的IPC |
SYSTEM V IPC涵蓋了所有的IPC機制,即管道,命名管道,消息隊列,信號,信號量和共享內(nèi)存。 它還涵蓋套接字和Unix域套接字。 | 幾乎所有的基本概念都與系統(tǒng)V相同。它僅與接口有所不同。 |
共享內(nèi)存接口調(diào)用shmget() ,shmat() ,shmdt() ,shmctl() |
共享內(nèi)存接口調(diào)用shm_open() ,mmap() ,shm_unlink() |
消息隊列接口調(diào)用msgget() ,msgsnd() ,msgrcv() ,msgctl() |
消息隊列接口調(diào)用mq_open() ,mq_send() ,mq_receive() ,mq_unlink() |
信號量接口調(diào)用semget() ,semop() ,semctl() |
信號量接口調(diào)用命名信號量sem_open() ,sem_close() ,sem_unlink() ,sem_post() ,sem_wait() ,sem_trywait() ,sem_timedwait() ,sem_getvalue() 未命名或基于內(nèi)存的信號量sem_init() ,sem_post() ,sem_wait () ,sem_getvalue() ,sem_destroy() |
使用鍵和標識符來標識IPC對象。 | 使用名稱和文件描述符來標識IPC對象 |
NA |
可以使用select() ,poll() 和epoll API來監(jiān)視POSIX消息隊列 |
提供msgctl() 調(diào)用 |
提供函數(shù)(mq_getattr() 和mq_setattr() )來訪問或設(shè)置屬性 |
NA |
多線程安全。 包含線程同步函數(shù),如互斥鎖,條件變量,讀寫鎖等 |
NA |
為消息隊列提供少量通知功能(如mq_notify() ) |
需要系統(tǒng)調(diào)用如shmctl() ,命令(ipcs ,ipcrm )來執(zhí)行狀態(tài)/控制操作。 |
共享內(nèi)存對象可以使用系統(tǒng)調(diào)用(如fstat(),fchmod() |
System V共享內(nèi)存段的大小在創(chuàng)建時是固定的(通過shmget() ) |
可以使用ftruncate() 來調(diào)整底層對象的大小,然后使用munmap() 和mmap() (或Linux專用的mremap() )重新創(chuàng)建映射 |