检查 IPC 消息队列是不是已经存在而不创建它

Posted

技术标签:

【中文标题】检查 IPC 消息队列是不是已经存在而不创建它【英文标题】:Check if a IPC message queue already exists without creating it检查 IPC 消息队列是否已经存在而不创建它 【发布时间】:2017-04-14 20:02:03 【问题描述】:

如何在不创建消息队列的情况下检查消息队列是否存在?

当使用msggetO_CREAT | O_EXCL 标志时,如果它存在,则调用将失败并返回值-1,但如果不存在,它将创建一个新的消息队列。有什么方法可以检查吗?

【问题讨论】:

如果您将零作为标志传递(或至少不传递IPC_CREAT 标志),那么如果没有消息队列与指定的键。我推荐你read the manual page。 感谢您的提示,我阅读了手册,没有注意到 ENOENT 标志。 【参考方案1】:

ipcs(1) 提供有关 IPC 设施的信息,ipcrm(1) 可用于从系统中删除 IPC 对象。

列出共享内存段:

ipcs -m

列出消息队列:

ipcs -q

删除使用 shmkey 创建的共享内存段:

ipcrm -M 键

删除由 shmid 标识的共享内存段:

ipcrm -m id

删除使用 msgkey 创建的消息队列:

ipcrm -Q 键

删除由 msgid 标识的消息队列:

ipcrm -q id

【讨论】:

以上是关于检查 IPC 消息队列是不是已经存在而不创建它的主要内容,如果未能解决你的问题,请参考以下文章

IPC——消息队列

❲知多少❳IPC之消息队列

消息队列 ENOMEM

以编程方式检查Oracle AQ队列是否存在

检查linux中消息队列和共享内存状态的命令?

IPC之——消息队列