当前位置: 首页 > 教程 > 进程通信 >

System V & Posix

精华
小牛编辑
119浏览
2023-03-14

下表列出了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(),命令(ipcsipcrm)来执行状态/控制操作。 共享内存对象可以使用系统调用(如fstat(),fchmod()
System V共享内存段的大小在创建时是固定的(通过shmget()) 可以使用ftruncate()来调整底层对象的大小,然后使用munmap()mmap()(或Linux专用的mremap())重新创建映射