l 消息队列在Linux IPC中一种很常见的通信方式,本人主要在线程间通信之间使用消息队列,
l 消息队列在理解上可认为是一种链表,线程可以往该消息队列写消息,同时也可以取出消息,当时使用消息队列前必须前初始化一个消息队列,也就是创建一个消息队列。
l 消息队列的接收函数mq_receive(),该函数的第三个参数是读取消息的长度;
l 消息的优先级,该值小于MQ_PRIO_MAX的值,数值越大,优先级越高,在调用mq_receive()函数时返回消息队列优先级最高的消息。
l Mq_send()与mq_receive()函数都是阻塞调用,也可以修改为非阻塞,可以通过设置mq_setattr为O_NONBLOCK;
struct mq_attr new_attr;
mq_getattr(mqID, &new_attr);//获取当前属性
new_attr.mq_flags = O_NONBLOCK;//设置为非阻塞
mq_setattr(mqID, &new_attr, NULL)//设置属性
l 消息队列的创建与关闭
#include
Mqd_t mq_open(const char *name,int oflag,mode_t mode,struct mq_attr *attr);
1. name:表示消息队列的名字,它符合POSIX IPC的名字规则,一般为临时文件。
2. oflag:表示打开的方式,和open函数的类似。有必须的选项:O_RDONLY,O_WRONLY,O_RDWR,还有可选的选项:O_NONBLOCK,O_CREAT,O_EXCL。
3. mode:是一个可选参数,在oflag中含有O_CREAT标志且消息队列不存在时,才需要提供该参数。表示默认访问权限。可以参考open。
4. attr:也是一个可选参数,在oflag中含有O_CREAT标志且消息队列不存在时才需要。该参数用于给新队列设定某些属性,如果是空指针,那么就采用默认属性。
Mqd_t mq_close(mqd_t mqdes);
关闭一个消息队列。
Mqd_t mq_unlink(const char *name);
用于删除一个消息队列。