Posix消息队列
目录
1. 概述
消息队列可认为是一个消息链表,队列中的每个消息具有如下属性:
- 消息优先级,由发送者赋予
- 消息数据长度,可以为0
- 消息数据(如果消息数据长度大于0)
Posix消息队列主要用于线程间消息的传递:
- A线程向队列中放置消息,B线程从队列中取出消息
- A线程向队列写入消息之前,不需要B线程在该队列上等待消息的到达
- A线程向队列写入消息之后,B线程可以在之后的某个时刻取出消息
- A线程只关心向队列放入消息,B线程只关心从队列取出消息,A、B两个线程相互独立、互不影响
2. Posix消息队列
创建与打开
mq_open
用于创建一个新的消息队列或打开一个已存在的消息队列,编译时需指定链接-lrt,下面其他函数同理。
//成功返回消息队列描述符,失败返回-1 mqd_t mq_open(const char *name, int oflag, ... /* mode_t mode, struct mq_attr *attr */);
- 当创建一个新的消息队列时,attr参数用于给新队列指定某些属性,若attr为NULL,则使用默认属性
- mq_open的返回值称为消息队列描述符,它的类型取决于系统实现,可能是整型或指针
- Linux下的Posix消息队列创建在虚拟文件系统中,正常情况下是不可见的,需要挂载到
/dev/mqueue/
目录才可以查看
mkdir /dev/mqueue mount -t mqueue none /dev/mqueue
关闭与删除
mq_close
用于关闭已打开的消息队列,mq_unlink
用于从系统中删除消息队列。
//两个函数返回值:成功返回0,失败返回-1 int mq_close(mqd_t mqdes); int mq_unlink(const char *name);
关闭与删除机制已在Posix信号量中讲过,这里不再赘述。