消息队列是LinuxIPC中很常用的一种通信方式,今天分析一下Posix消息队列,本文中所讲的消息队列均为Posix消息队列。什么是Posix消息队
消息队列可以认为它是一个消息链表,有足够写权限的进程可以往队列中发送消息,有足够读权限的进程可以往队列中接收消息。
每个消息都是一个记录,它由发送者赋予一个优先级。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。这也就说明消息队列具有随内核的持续性,也就是说进程关闭后,消息队列依然存在,除非内核重新自举。
Posix消息队列有如下特点:对Posix消息队列的读总是返回优先级最高最早的消息。当往空的消息队列中放置一个消息时,Posix消息队列允许产生一个信号或者启动一个接收线程。
Posix消息队列中的每条消息通常具有以下属性:一个表示优先级的整数;消息的数据部分的长度;消息数据本身;
消息队列的基本操作
打开或创建一个posix消息队列操作接口
mqdtmqopen(constcharname,intoflag,modetmode,structmqattrattr);
Linkwithlrt。
参数name为posixIPC名字,即将要被打开或创建的消息队列对象,为了便于移植,需要指定为name的格式。
参数oflag必须要有ORDONLY(只读)、标志ORDWR(读写),OWRONLY(只写)之一,除此之外还可以指定OCREAT(没有该对象则创建)、OEXCL(如果OCREAT指定,但name不存在,就返回错误),ONONBLOCK(以非阻塞方式打开消息队列,在正常情况下mqreceive和mqsend函数会阻塞的地方,使用该标志打开的消息队列会返回EAGAIN错误)。
当操作一个新队列时,使用OCRE...
(全文)