IPCS消息传递相关查询

时间:2013-07-31 08:34:38

标签: unix operating-system message-passing ipcs

我正在处理Message Passing IPCS方法。我对此几乎没有疑问:

  1. ipcs -q中的关键字段向我显示0x00000000这意味着什么?
  2. 我能看到使用msqid传递的消息是什么吗?
  3. 如果在执行命令ipcs -q后存在两个条目(针对特定用户)。这是否意味着此特定用户传递了两条消息?
  4. 如果used-bytes和message字段设置为0,这是什么意思?
  5. 是否可以查看邮件队列是否已满?
  6. 我们可以为一个特定用户提供多少个队列?
  7. 我尝试过瞪眼,但无法找到这些问题的答案。 请帮忙

1 个答案:

答案 0 :(得分:1)

1。共享内存网段的“密钥”字段通常为 0x00000000 。这表示在创建共享内存段期间指定的 IPC_PRIVATE 键。 manual of shmget()包含更多详细信息。

2。 AFAIK,这是无法做到的。如果任何msg从msgQ“退出”,那么预期的接收器将不会看到它。

3. 消息队列列表中的2个条目表示系统中当前有2个活动消息队列由相应的唯一密钥标识。

创建额外的msgQ:ipcmk -Q
删除现有的msgQ:ipcrm -Q <unique-key>

4. used-bytesmessages字段设置为0表示当前没有使用该特定msgQ进行传输。

5. 目前有一种方法可以通过编程方式获取当前在msgQ中排队的msg数量,如下面的C片段所示。接下来,这可以与msgQ的大小进行比较,如 answer 中所示。

int ret = msgctl(msqid, IPC_STAT, &buf);  
uint msg = (uint)(buf.msg_qnum);  
printf("msgs in Q = %u\n", msg);  

6. 系统上所有msgQ使用的总内存存在限制。这可以通过ulimit -q获得。 msgQ中使用的字节数列在used-bytes输出的ipcs -Q列下。 msgQs的总数仅受可用于从上面的msgQ内存池限制创建新msgQ的内存量的限制。

另请查看此答案的后半部分,了解POSIX message queues上的一些示例操作。