0

2 つのメッセージを含む mqueue がありますが、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, &notify);

で、受け取りはこちら。

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

msgSize は、errno EAGAIN で常に -1 を返します。ドキュメントから、これはキューにメッセージがないことを意味するはずです。非ブロッキングであることに注意してください。

4

1 に答える 1

0

問題はコードのバグです。開くための呼び出しは

mqrcv_id = mq_open(queue_name, O_RDONLY | O_NONBLOCK, 
              S_IRWXU | S_IRWXO, &msgq_attr);
于 2014-05-16T15:21:26.467 に答える