我需要查看消息队列而不删除它们。只有符合某些条件,我才会继续删除消息队列项。这该怎么做?以下是我所知道的API - 但似乎没有人支持偷看。
mq_close()
- 关闭消息队列
mq_getattr()
- 获取消息队列的当前属性
mq_notify()
- 当队列变为非空时通知调用进程
mq_open()
- 打开或创建消息队列
mq_receive()
- 从队列中收到消息
mq_send()
- 将消息放入消息队列
mq_setattr()
- 设置消息队列的标志
mq_unlink()
- 取消链接(即删除)邮件队列
有没有办法在不删除邮件的情况下查看邮件?
答案 0 :(得分:6)
对于消息队列而言,偷看可能是一个坏主意,因为像所指出的那样,竞争条件的危险性。假设你偷看了一条消息;由于您无法锁定队列,因此您将无法可靠地检索您偷看的相同消息。如果您有两个进程从同一队列接收互斥消息,您应该考虑将这些消息分成两个队列,以便设计清晰和竞争条件稳定。
答案很简短:窥视是不太可能的,因为它需要显式的锁定语义来稳定地执行它。