这是我的linux机器上shmget -m的输出。这里所有的键都是0。
为什么会这样?创造它们的过程将如何区分它们?通常我们使用ftok()创建一个密钥,并使用它们使用shmget()创建共享内存。通过这种方式,我们可以区分程序中的内存段。似乎操作系统没有不同的密钥。引擎盖下可能会发生什么?我是否也可以在不生成唯一密钥的情况下执行此类操作?
答案 0 :(得分:3)
特殊密钥0
在shmget(2)
系统调用中也称为IPC_PRIVATE
。这意味着该段没有“公共”密钥,任何希望使用它的人都必须以其他方式获取对它的引用。例如,调用fork(2)
以生成工作进程的服务器进程可以使用“私有”共享内存与这些工作进行通信。它不需要密钥,因为它只在fork之前显式打开一次。