我有一个mqueue,其中有2条消息,但是对mq_receive的调用不会提取数据。我以前对这个消息队列没有任何经验,所以请原谅我的无知。我相信发送端工作正常,因为回显“文件”确实显示了信息。
QSIZE:48 NOTIFY:1 SIGNO:0 NOTIFY_PID:5741
这是2条消息,未生成消息信号。 PID是将调用mq_receive的进程。
供参考,这是开放代码。
msgq_attr.mq_maxmsg = MAX_NUM_MESSAGES; // 20
msgq_attr.mq_msgsize = MAX_MSG_SIZE; // 256
mqrcv_id = mq_open(queue_name, O_RDONLY | O_NONBLOCK,
S_IRWXU | S_IRWXO, msgq_attr);
notify.sigev_notify = SIGEV_NONE;
notify.sigev_notify_attributes = NULL;
mq_notify(mqrcv_id, ¬ify);
这是接收。
int msgSize = mq_receive(mqrcv_id, buffer,
MAX_MSG_SIZE, &msgprio);
msgSize始终以errno EAGAIN返回-1。从文档中,这应该意味着队列中没有消息。请注意,它是NONBLOCKING。
最佳答案
问题是代码错误。打开的电话应该是
mqrcv_id = mq_open(queue_name, O_RDONLY | O_NONBLOCK,
S_IRWXU | S_IRWXO, &msgq_attr);