Подтвердить что ты не робот

Как заглянуть в очередь сообщений Linux (POSIX) без удаления элемента?

Мне нужно заглянуть в очередь сообщений, не удаляя их. Я продолжу и удалю элемент очереди сообщений только в том случае, если он соответствует определенным критериям. Как это сделать? Ниже приведены API-интерфейсы, которые я знаю, но ни один из них не поддерживает поддержку.

  • mq_close() - закрыть очередь сообщений

  • mq_getattr() - получить текущие атрибуты очереди сообщений

  • mq_notify() - уведомлять вызывающий процесс, когда очередь становится непустой

  • mq_open() - открыть или создать очередь сообщений

  • mq_receive() - получать сообщение из очереди

  • mq_send() - поместить сообщение в очередь сообщений

  • mq_setattr() - установить флаги для очереди сообщений

  • mq_unlink() - отсоединить (то есть удалить) очередь сообщений

Есть ли способ заглянуть в сообщение без его удаления?

4b9b3361

Ответ 1

Peeking, вероятно, является плохой идеей для очереди сообщений, потому что, как уже отмечалось, опасность условий гонки. Просто предположим, что вы заглянули в сообщение; поскольку вы не можете заблокировать очередь, вы не сможете надежно получить то же сообщение, которое вы заглянули. Если у вас есть два процесса, получающих взаимоисключающие сообщения из одной очереди, вы должны подумать о том, чтобы разделить эти сообщения на две очереди, чтобы ясность дизайна и стабильность состояния гонки.

Answer by short: Peek очень маловероятен, потому что ему понадобится явная блокировка семантики, чтобы выполнить его стабильно.