为什么每次重新启动操作系统时都会自动构建msgqueue?

时间:2013-12-14 13:29:09

标签: c linux ipc

我的程序使用系统msgqueue for ipc .my code:

  key = 0x0000ed79;
    if( ( id=msgget(key,0666|IPC_CREAT)) <=  0 )
            return  false ;
      else  return  true 
问题是:

  1. 每次重启机器时,都会自动使用相同的键建立msgqueue,但其id为0,所以我必须ipcrm;
  2. 为什么我不能使用id为0的msgqueue?这里是手册页中msgget api返回值的描述,似乎id为0不正确:

      

    如果成功,返回值将是消息队列标识符(非负整数),否则为-1,其中errno表示错误

1 个答案:

答案 0 :(得分:0)

  

如何找到哪个进程使用相同的密钥创建队列?

没有简单的方法可以找到创建队列的进程,但我们可以最后检查发送到队列或从队列接收的进程,也许创建进程就是其中之一(即使没有,也可以识别进程)使用队列可能有帮助),e。 G。对于 msqid 0

ipcs -qi0

显示lspid=… lrpid=… - 发送/接收消息的最后进程的进程ID                      来自关联的消息队列。