共享内存段的键为0 [重复]

Posted

技术标签:

【中文标题】共享内存段的键为0 [重复]【英文标题】:Keys of shared memory segments are 0 [duplicate] 【发布时间】:2015-12-15 11:31:06 【问题描述】:

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

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

【问题讨论】:

key一直为0还需要什么? 阅读更多关于shmget(2) 【参考方案1】:

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

【讨论】:

以上是关于共享内存段的键为0 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

pq:无法调整共享内存段的大小。设备上没有剩余空间

共享内存网络(day13)

内存共享

在 Linux 中使用 ipcrm 删除共享内存

PHP共享内存段实现,使用shmop函数实现内存共享

Linux 进程通信(共享内存区)