Linux中的共享内存(ipc)

Posted

技术标签:

【中文标题】Linux中的共享内存(ipc)【英文标题】:shared memory (ipc)in linux 【发布时间】:2011-03-11 08:27:29 【问题描述】:

共享内存意味着一个进程将创建一个其他进程可以访问的内存部分。

我的问题是:其他进程如何知道创建的共享内存shmid(即shmid=shmget(key-t ,size , permission);)?

【问题讨论】:

【参考方案1】:

为了简化:创建共享内存的进程定义了名称和权限(登录用户的进程)。

基本上你创建一个文件:

file_descriptor = shm_open("/some.shared.memory", 
                   (O_CREAT | O_RDWR),
                   (S_IREAD | S_IWRITE))  

或者如果它存在,你可以打开它:

file_descriptor = shm_open("/some.shared.memory",
                   (O_CREAT | O_EXCL | O_RDWR),
                   (S_IREAD | S_IWRITE))

因此,名称“/some.shared.memory”是您查找共享段的方式。 (注意标志)

看这里http://www.kernel.org/doc/man-pages/online/pages/man7/shm_overview.7.html 在“shm_open 示例”上进行 Google 搜索,您会发现很多示例。 创建文件的进程将确定权限(所有者+组) 请参阅 chown 命令和 fchmod 函数,您可以调用它们来设置权限。另请查看 umask

【讨论】:

【参考方案2】:

他们需要用同样的方式来推导出key_t;通常你使用ftok函数,双方使用相同的文件名和id值,所以他们最终得到相同的键。

【讨论】:

以上是关于Linux中的共享内存(ipc)的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程IPC浅析[进程间通信SystemV共享内存]

检查linux中消息队列和共享内存状态的命令?

20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结

Linux进程间通信--共享内存

20155332 linux进程间通信(IPC)机制(未完成,待续)

Linux IPC之共享内存C 事例