У меня есть 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 всегда возвращает -1 с ошибкой EAGAIN. Из документации это должно означать, что в очереди нет сообщений. Обратите внимание, что это НЕ БЛОКИРОВКА.
Проблема заключается в ошибке кода. Призыв открыть должен быть
mqrcv_id = mq_open(queue_name, O_RDONLY | O_NONBLOCK,
S_IRWXU | S_IRWXO, &msgq_attr);