我正在处理Message Passing IPCS方法。我对此几乎没有疑问:
ipcs -q
中的关键字段向我显示0x00000000
这意味着什么?ipcs -q
后存在两个条目(针对特定用户)。这是否意味着此特定用户传递了两条消息?我尝试过瞪眼,但无法找到这些问题的答案。 请帮忙
答案 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-bytes
和messages
字段设置为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上的一些示例操作。