c++ - 当数据存在时 mq_receive 返回 EAGAIN

标签 c++ linux mqueue

我有一个 mqueue,其中有 2 条消息,但对 mq_receive 的调用不会提取数据。我以前对这个消息队列没有任何经验,所以请原谅我的无知。我相信发送端工作正常,因为回显"file"确实显示了信息。

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, &notify);

这是接收信息。

int msgSize = mq_receive(mqrcv_id, buffer,
                        MAX_MSG_SIZE, &msgprio);

msgSize 始终返回 -1,并带有 errno EAGAIN。从文档来看,这应该意味着队列中没有消息。请注意,它是非阻塞的。

最佳答案

该问题是一个代码错误。对 open 的调用应该是

mqrcv_id = mq_open(queue_name, O_RDONLY | O_NONBLOCK, 
              S_IRWXU | S_IRWXO, &msgq_attr);

关于c++ - 当数据存在时 mq_receive 返回 EAGAIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23696017/

相关文章:

linux - 为Beagleboard构建嵌入式QT5

c - Posix 消息队列 QSIZE 查询

C++ 冒泡排序 : Biggest number becomes random

c++ - Ofstream 拒绝带参数的输入

c++ - 为什么模板化的派生类可以在 gcc 上访问其基私有(private)成员?

python - python 管道的同步/异步行为

linux - QClipboard 在 GNU/Linux 下工作很有趣

c - 通过消息队列发送void*对象[linux]

C mqueue 不发送或接收整个消息

c++ - 如何用单向链表实现一个队列,使其 ENQUEUE 和 DEQUEUE 的时间复杂度为 O(1)?