如何在不删除项目的情况下查看Linux(POSIX)消息队列?

时间:2011-09-13 12:10:30

标签: c linux message-queue

我需要查看消息队列而不删除它们。只有符合某些条件,我才会继续删除消息队列项。这该怎么做?以下是我所知道的API - 但似乎没有人支持偷看。

  • mq_close() - 关闭消息队列

  • mq_getattr() - 获取消息队列的当前属性

  • mq_notify() - 当队列变为非空时通知调用进程

  • mq_open() - 打开或创建消息队列

  • mq_receive() - 从队列中收到消息

  • mq_send() - 将消息放入消息队列

  • mq_setattr() - 设置消息队列的标志

  • mq_unlink() - 取消链接(即删除)邮件队列

有没有办法在不删除邮件的情况下查看邮件?

1 个答案:

答案 0 :(得分:6)

对于消息队列而言,偷看可能是一个坏主意,因为像所指出的那样,竞争条件的危险性。假设你偷看了一条消息;由于您无法锁定队列,因此您将无法可靠地检索您偷看的相同消息。如果您有两个进程从同一队列接收互斥消息,您应该考虑将这些消息分成两个队列,以便设计清晰和竞争条件稳定。

答案很简短:窥视是不太可能的,因为它需要显式的锁定语义来稳定地执行它。