目录
34POSIX消息队列
posix消息队列的一个可能实现如下图:
POSIX消息队列相关函数
编译时候加上 -lrt 选项,即连接librt 库 (实时库)
#include <fcntl.h> /* For O_* constants */
#include <sys/stat.h> /* For mode constants */
#include <mqueue.h>
函数原型
mqd_t mq_open(const char *name, int oflag); mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *attr);
函数功能
用来创建和访问一个消息队列
返回值
成功返回消息队列文件描述符;失败返回-1
参数说明
name: 某个消息队列的名字,必须以/打头,并且后续不能有其它/ ,形如/somename长度不能超过NAME_MAX(255) oflag:与open函数类似,可以是O_RDONLY、O_WRONLY、O_RDWR,还可以按位或上O_CREAT、O_EXCL、O_NONBLOCK; mode:如果oflag指定了O_CREAT,需要设置mode。
函数原型
mqd_t mq_close(mqd_t mqdes);
函数功能
关闭消息队列
返回值
成功返回0;失败返回-1
参数说明
mqdes : 消息队列描述符
函数原型
mqd_t mq_unlink(const char *name);
函数功能
删除消息队列
返回值
成功返回0;失败返回-1
参数说明
消息队列的名字
函数原型
mqd_t mq_getattr(mqd_t mqdes, struct mq_attr *attr); mqd_t mq_setattr(mqd_t mqdes, struct mq_attr *newattr, struct mq_attr *oldattr);
函数功能
获取/设置消息队列属性
返回值
成功返回0;失败返回-1
参数说明
struct mq_attr { long mq_flags; /* Flags: 0 or O_NONBLOCK */ long mq_maxmsg; /* Max. # of messages on queue */ long mq_msgsize; /* Max. message size (bytes) */ long mq_curmsgs; /* # of messages currently in queue */ }; mq_flags 是标志; mq_maxmsg 即一个消息队列消息个数上限; mq_msgsize即一条消息的数据上限; mq_curmsgs即当前消息个数
函数原型
mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio);
函数功能
发送消息