共享内存段的键为0

Keys of shared memory segments are 0

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

为什么?创建它们的过程将如何区分它们?通常我们使用 ftok() 创建一个密钥,并使用它们通过 shmget() 创建共享内存。这样我们就可以区分我们程序中的内存段。似乎 OS 在没有明显键的情况下四处走动。幕后可能发生了什么?我也可以在不生成唯一密钥的情况下做类似的事情吗?

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