linux中的消息队列简单总结

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);

用于删除一个消息队列。

图片[1]-linux中的消息队列简单总结-趣考网

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享