linux系统如何获得某消息队列的消息数量

豌豆射手kid 2017-06-22 04:36:43
小生刚接触Linux系统,有一个问题希望得到解答:
linux系统下,消息队列是以链表队列形式存在,当发送一个消息到该消息队列时,把发送的消息构造成一个msg链表队列结构的对象,并添加到msqid的链表队列中。
那么,该如何获取某msqid消息队列中的消息数量值,即该消息队列链表的节点数?并清空消息列表,即删除该链表的除头尾节点的所有节点。
注意:不是删除消息列表:msgctl(msqid,IPC_RMID,buf)
...全文
1401 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklinux 2017-06-23
  • 打赏
  • 举报
回复
引用 3 楼 u013319480 的回复:
[quote=引用 2楼LubinLew 的回复:]没这种功能吧, man 一下msgctl 就那几个参数项,没有你说的那种功能。 而且这种功能几乎是没用的, 消息队列是用来进程间通信的, 你要是不确定发送的信息就不应该先加到队列里,过一会反悔了再删掉了(可能早就发出去了) 另外,消息队列 使用 POSIX标准的, 不要再学System V的API了,过时了。
你好,的确是没有这个功能。但是有没有办法可以实现呢?因为消息队列内的内容比较庞大,我想设计一个进程专门清理内容的,比如达到一个阈值,把它清空。或者说,达到一个阈值,干脆删掉重建,但是关键是怎么获取这个内容的量来与阈值对比呢?我刚开始接触,望谅解[/quote] 用IPC_STAT可以获取到消息队列的数量: int msgctl(int msqid, IPC_STAT, struct msqid_ds *buf); struct msqid_ds { ... unsigned long __msg_cbytes; /* Current number of bytes in queue (nonstandard) */ msgqnum_t msg_qnum; /* Current number of messages in queue */ msglen_t msg_qbytes; /* Maximum number of bytes ... };
豌豆射手kid 2017-06-22
  • 打赏
  • 举报
回复
引用 2楼LubinLew 的回复:
没这种功能吧, man 一下msgctl 就那几个参数项,没有你说的那种功能。 而且这种功能几乎是没用的, 消息队列是用来进程间通信的, 你要是不确定发送的信息就不应该先加到队列里,过一会反悔了再删掉了(可能早就发出去了) 另外,消息队列 使用 POSIX标准的, 不要再学System V的API了,过时了。
你好,的确是没有这个功能。但是有没有办法可以实现呢?因为消息队列内的内容比较庞大,我想设计一个进程专门清理内容的,比如达到一个阈值,把它清空。或者说,达到一个阈值,干脆删掉重建,但是关键是怎么获取这个内容的量来与阈值对比呢?我刚开始接触,望谅解
LubinLew 2017-06-22
  • 打赏
  • 举报
回复
没这种功能吧, man 一下msgctl 就那几个参数项,没有你说的那种功能。 而且这种功能几乎是没用的, 消息队列是用来进程间通信的, 你要是不确定发送的信息就不应该先加到队列里,过一会反悔了再删掉了(可能早就发出去了) 另外,消息队列 使用 POSIX标准的, 不要再学System V的API了,过时了。
豌豆射手kid 2017-06-22
  • 打赏
  • 举报
回复
类似Microsoft Message Queue中的Purge()

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧