Как заглянуть в очередь сообщений Linux (POSIX) без удаления элемента?
Мне нужно заглянуть в очередь сообщений, не удаляя их. Я продолжу и удалю элемент очереди сообщений только в том случае, если он соответствует определенным критериям. Как это сделать? Ниже приведены API-интерфейсы, которые я знаю, но ни один из них не поддерживает поддержку.
-
mq_close()
- закрыть очередь сообщений
-
mq_getattr()
- получить текущие атрибуты очереди сообщений
-
mq_notify()
- уведомлять вызывающий процесс, когда очередь становится непустой
-
mq_open()
- открыть или создать очередь сообщений
-
mq_receive()
- получать сообщение из очереди
-
mq_send()
- поместить сообщение в очередь сообщений
-
mq_setattr()
- установить флаги для очереди сообщений
-
mq_unlink()
- отсоединить (то есть удалить) очередь сообщений
Есть ли способ заглянуть в сообщение без его удаления?
Ответы
Ответ 1
Peeking, вероятно, является плохой идеей для очереди сообщений, потому что, как уже отмечалось, опасность условий гонки. Просто предположим, что вы заглянули в сообщение; поскольку вы не можете заблокировать очередь, вы не сможете надежно получить то же сообщение, которое вы заглянули. Если у вас есть два процесса, получающих взаимоисключающие сообщения из одной очереди, вы должны подумать о том, чтобы разделить эти сообщения на две очереди, чтобы ясность дизайна и стабильность состояния гонки.
Answer by short: Peek очень маловероятен, потому что ему понадобится явная блокировка семантики, чтобы выполнить его стабильно.