【问题标题】:How to delete or clear all the messages from the POSIX message queue in c?如何在c中删除或清除POSIX消息队列中的所有消息?
【发布时间】:2020-04-25 19:24:33
【问题描述】:

我想从 POSIX 消息队列中删除所有消息。我在互联网上搜索,但没有找到任何方法,而是找到了删除消息队列本身的方法,但这不是我的情况,我实际上想从消息队列中清除所有待处理的消息。

我正在阅读手册页,其中找到了用于控制消息队列参数的mq_setattr API。我只是想知道如果我使用mq_setattrmq_curmsgs 的值设置为0,它会清除队列中的待处理消息吗?

在这方面的任何帮助将不胜感激

【问题讨论】:

  • 同样来自 mq_setattr 的手册页:唯一可以修改的属性是 mq_flags 中 O_NONBLOCK 标志的设置。 newattr 中的其他字段将被忽略。

标签: c linux posix ipc message-queue


【解决方案1】:

清除消息队列的一种方法是mq_receive所有消息但不处理它们。


man mq_setattr:

唯一可以修改的属性是 mq_flags 中 O_NONBLOCK 标志的设置。

【讨论】:

  • 哦,是的,明白了,我们可以在while循环中处理消息,一旦队列为空,我们就可以中断while循环。我的方向正确吗?
  • @vivek 请注意,您可能希望设置O_NONBLOCK,这样当队列耗尽时,您的while 循环不会阻塞mq_receive,而是会因EAGAIN 而失败.
  • 是的,明白了。我会处理的。非常感谢
猜你喜欢
  • 2016-06-03
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多