System V 和 Posix
下表列出了 System V IPC 和 POSIX IPC 之间的区别。
SYSTEM V | POSIX |
---|---|
AT & T (1983) 引入了三种新形式的 IPC 设施,即消息队列、共享内存和信号量。 | IEEE 指定的可移植操作系统接口标准,用于定义应用程序编程接口 (API)。 POSIX 涵盖了 IPC 的所有三种形式 |
SYSTEM V IPC 涵盖了所有 IPC 机制,即管道、命名管道、消息队列、信号、信号量和共享内存。它还涵盖了套接字和 Unix 域套接字。 | 几乎所有的基本概念都与 System 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()) 来访问或设置属性 11. IPC - System V & POSIX |
NA | 多线程安全。涵盖线程同步功能,如互斥锁、条件变量、读写锁等。 |
NA | 为消息队列提供一些通知功能(例如 mq_notify()) |
需要系统调用(例如 shmctl())、命令(ipcs、ipcrm)来执行状态/控制操作。 | 可以使用系统调用(例如 fstat()、fchmod())检查和操作共享内存对象 |
System V 共享内存段的大小在创建时是固定的(通过 shmget()) | 我们可以使用 ftruncate() 调整底层对象的大小,然后使用 munmap() 和 mmap() 重新创建映射(或者 Linux 特定的 mremap()) |