概述
消息队列可看做消息链表,线程可在队列中进行消息读写。
在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。
一个进程可以往某个队列写入一些消息,然后终止,再让另一个进程在以后某个时刻读取这些消息。而管道或FIFO的最后一次关闭发生时,仍在该管道或FIFO上的数据将被清除。
posix消息队列特点
对posix消息队列的读总是返回最高优先级的最早消息。
当往一个空队列放置一个消息时,posix消息队列允许产生一个信号或者启动一个线程。
队列中的每个消息具有如下属性:
优先级
消息的数据部分长度
数据本身
消息队列的布局:
mq_open mq_close mq_unlink函数
mq_open 函数创建一个新的消息队列或者打开一个应存在的消息队列。
#include <mqueue.h> mqd_t mq_open(const char *name,int oflag,.../*mode_t mode,struct mq_attr *attr */);
name:posix IPC 名字,可能是某个文件系统中一个真正的路径名,也可能不是。
oflag参数:O_RDONLY,O_WRONLY,O_RDWR,O_CREAT,O_EXCEL,O_NONBLOCK
mode:该参数在当创建一个新队列时需要。
常值 | 说明 |
S_IRUSR S_IWUSR |
用户(属主)读 用户(属主)写 |
S_IRGRP S_IWGRP |
(属)组成员读 (属)组成员写 |
S_IROTH S_IWOTH |
其他用户读 其他用户写 |
attr:该参数在当创建一个新队列时需要。用于给新队列指定某些属性,若为空指针,则为默认属性。
mq_open返回值:消息队列描述符。