POSIX IPC简介
POSIX IPC对象编程接口
接口 | 消息队列 | 信号量 | 共享内存 |
---|---|---|---|
头文件 对象句柄 |
<mqueue.h> mqd_t |
<semaphore.h> sem_t * |
<sys/mman.h> int(文件描述符) |
创建/打开 关闭 断开链接 执行IPC 其他操作 |
mq_open mq_close mq_unlink mq_send mq_receive mq_setattr()——设置特性 mq_getattr()——获取特性 mq_notify() ——请求通知 |
sem_open() sem_close() sem_unlink() sem_post()、sem_wait() sem_getvalue() sem_init()——初始化未命名信号量 sem_destroy()——销毁未命名信号量 |
shm_open() + mmap() munmap() shm_unlink() 在共享区域中的位置上操作 无 |
POSIX与system V IPC
POSIX IPC
- POSIX接口更简单:使用类似于文件I/O的open、close、unlink等接口
- POSIX使用名字代替键来标识IPC对象
- 对IPC对象引用计数,简化了对IPC对象的删除
- 跟文件类似,删除操作也仅仅是删除了IPC对象的名字
- 只有当IPC对象的引用计数变成0之后才能真正销毁
System V IPC
- System V IPC 可移植性好:几乎所有的UNIX系统都支持System V,POSIX在UNIX系统中只是一个可选组件,有些UNIX系统并不支持
- Linux系统一般会支持system V
- Linux2.6开始陆续支持POSIX......
POSIX编程注意事项
- 使用POSIX消息队列和共享内存时,需要实时库librt链接,编译时需指定-lrt
- 使用POSIX信号量时,需要和线程库libthread链接起来,编译时需指定-lpthread