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 消息队列的一些示例操作。