检查 IPC 消息队列是不是已经存在而不创建它
Posted
技术标签:
【中文标题】检查 IPC 消息队列是不是已经存在而不创建它【英文标题】:Check if a IPC message queue already exists without creating it检查 IPC 消息队列是否已经存在而不创建它 【发布时间】:2017-04-14 20:02:03 【问题描述】:如何在不创建消息队列的情况下检查消息队列是否存在?
当使用msgget
和O_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 消息队列是不是已经存在而不创建它的主要内容,如果未能解决你的问题,请参考以下文章