0

我正在处理消息传递 IPCS 方法。我对此确实有几个问题:

  1. 中的 KEY 字段ipcs -q告诉我0x00000000 这是什么意思?
  2. 我可以使用 msqid 查看传递的消息吗?
  3. 如果在执行 command 后存在两个条目(对于特定用户)ipcs -q。这是否意味着此特定用户传递了两条消息?
  4. 如果 used-bytes 和 message 字段设置为 0,这意味着什么?
  5. 是否可以查看消息队列是否已满?
  6. 对于一个特定的用户,我们可以有多少个队列?

我尝试了凝视,但无法找到这些问题的答案。请帮忙

4

1 回答 1

1

1.共享内存段的“ key0x00000000 ”字段通常是​​. 这表示IPC_PRIVATE在创建共享内存段期间指定的键。shmget()的手册包含更多详细信息。

2. AFAIK,这是不可能的。如果任何 msg 从 msgQ 中“出队”,则预期的接收者将看不到它。

3.消息队列列表中的 2 个条目表示系统上当前有 2 个活动消息队列,由它们对应的唯一键标识。

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

4.used-bytes andmessages字段设置为 0 表示当前没有使用该特定 msgQ 发生传输。

5.目前的一种方法是通过编程获取当前在 msgQ 中排队的 msg 数量,如以下 C 代码片段所示。接下来,可以将其与本答案中演示的 msgQ 的大小进行比较。

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。msgQ 的总数仅受可用于从上面看到的 msgQ 内存池限制创建新 msgQ 的内存量的限制。

另请查看此答案的后半部分,了解有关POSIX 消息队列的一些示例操作。

于 2013-08-06T08:16:47.980 回答