mq_receive возвращает EAGAIN при наличии данных

У меня есть 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, &notify);

А вот и получение.

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

msgSize всегда возвращает -1 с ошибкой EAGAIN. Из документации это должно означать, что в очереди нет сообщений. Обратите внимание, что это НЕ БЛОКИРОВКА.

0

Решение

Проблема заключается в ошибке кода. Призыв открыть должен быть

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

Другие решения


По вопросам рекламы [email protected]