2.3 KiB
2.3 KiB
概述
消息队列。关于POSIX消息队列详见man 7 mq_overview
。
数据结构
struct mq_attr {
long mq_flags; /* Flags (ignored for mq_open()) */
long mq_maxmsg; /* Max. # of messages on queue */
long mq_msgsize; /* Max. message size (bytes) */
long mq_curmsgs; /* # of messages currently in queue
(ignored for mq_open()) */
};
函数
/* 打开或创建一个POSIX消息队列
* name : 用于标识消息队列
* oflag : 描述进行什么操作,详见<fcntl.h>。
O_RDWR - 打开队列后即可以接收,也可以发送消息
O_CREAT - 消息队列如不存在则创建之。
O_NONBLOCK - 以非阻塞模式打开队列。
* 返回值:成功,则返回消息队列描述符;失败,返回(mqd_t) -1。
*/
mqd_t mq_open(const char *name, int oflag);
/* 打开或创建一个POSIX消息队列。如在oflag里定义了O_CREAT,则必须附加后面的两个参数。
* mode : 定义了新队列的权限,像open()那样。
* attr : 关于消息队列里消息的信息。
* 返回值:成功,则返回消息队列描述符;失败,返回(mqd_t) -1。
*/
mqd_t mq_open(const char *name, int oflag, mode_t mode,
struct mq_attr *attr);
/* 关闭消息队列 */
int mq_close(mqd_t mqdes);
/* 删除消息队列 */
int mq_unlink(const char *name);
/* 向消息队列发消息
* mqdes : 消息队列的描述符
* msg_ptr : 代表了要向消息队列发的消息
* msg_len : 要发的消息的长度,可以是0。注:必须小于每条消息允许的最大长度mq_msgsize。
* msg_prio : 要发的消息的优先级,要求是非负整数。
* 返回值 : 0成功;-1失败。
*/
int mq_send(mqd_t mqdes, const char *msg_ptr,
size_t msg_len, unsigned int msg_prio);
/* 从消息队列收消息 */
ssize_t mq_receive(mqd_t mqdes, char *msg_ptr,
size_t msg_len, unsigned int *msg_prio);
/* 从消息队列收消息
* abs_timeout : 接收消息时允许等待的时间。如果消息队列为空且打开消息队列的时候没有指定O_NONBLOCK标志,则此参数有效。
*/
ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr,
size_t msg_len, unsigned int *msg_prio,
const struct timespec *abs_timeout);