文章目录
posix与system v对比
•POSIX IPC
•POSIX接口更简单:使用类似于文件I/O的open、close、unlink等接口
•POSIX使用名字代替键来标识IPC对象
•对 IPC 对象引用计数,简化了对 IPC 对象的删除
–跟文件类似,删除操作也仅仅是删除了IPC对象的名字
–只有当IPC对象的引用计数变成0之后才真正销毁IPC对象
•System V IPC
•System V IPC 可移植性更好:几乎所有的UNIX系统都支持system V,POSIX在UNIX系统中只是一个可选组件,有些UNIX系统并不支持
•Linux系统一般都会支持system V
•Linux 2.6开始陆续支持POSIX…
POSIX 编程注意事项
•使用POSIX 消息队列和共享内存时,需要实时库librt链接,编译时需指定 $ -lrt
•使用POSIX 信号量时,需要和线程库libpthread链接起来,编译时需指定$ -lpthread
相关API
•mq_open: 创建或打开一个消息队列
•mq_send: 向消息队列写入一条消息
•mq_receive:从消息队列中读取一条消息
•mq_close: 关闭进程打开的消息队列
•mq_unlink: 删除一个消息队列
•mq_setattr:设置消息队列一些额外的属性
•mq_getattr:获取消息队列一些额外的属性
•mq_nofity: 异步通知
创建或打开 IPC 对象
•函数原型:
–mqd_t mq_open (const char *name, int oflag);
–mqd_t mq_open (const char *name, int oflag, mode_t mode,
struct mq_attr *attr);
•函数功能:
使用指定名字创建或打开一个对象,返回该对象的句柄
•函数参数:
–name:用来标识要创建或打开的对象
–Oflag:O_CREAT/O_EXCL /O_RDONLY /O_WRONLY /O_RDWR /O_NONBLOCK
–Mode:位掩码,权限设置
–Attr:设置消息队列的属性,若为NULL,使用默认属性。Linux3.5以后版本也可通过/proc查看设置
•函数返回值
–成功:返回消息队列的IPC对象描述符
–失败:返回-1,并设置errno