共享内存段的键为0

时间:2015-12-15 11:31:06

标签: c linux ipc shared-memory

这是我的linux机器上shmget -m的输出。这里所有的键都是0。

enter image description here

为什么会这样?创造它们的过程将如何区分它们?通常我们使用ftok()创建一个密钥,并使用它们使用shmget()创建共享内存。通过这种方式,我们可以区分程序中的内存段。似乎操作系统没有不同的密钥。引擎盖下可能会发生什么?我是否也可以在不生成唯一密钥的情况下执行此类操作?

1 个答案:

答案 0 :(得分:3)

特殊密钥0shmget(2)系统调用中也称为IPC_PRIVATE。这意味着该段没有“公共”密钥,任何希望使用它的人都必须以其他方式获取对它的引用。例如,调用fork(2)以生成工作进程的服务器进程可以使用“私有”共享内存与这些工作进行通信。它不需要密钥,因为它只在fork之前显式打开一次。