【发布时间】:2011-08-05 02:51:51
【问题描述】:
我的一个项目有点问题。
我一直在尝试找到一个有据可查的示例,使用 fork() 共享内存,但没有成功。
基本上场景是当用户启动程序时,我需要在共享内存中存储两个值:current_path 是一个 char* 和一个 file_name 也是 char*。
根据命令参数,一个新进程以fork() 启动,该进程需要读取和修改存储在共享内存中的 current_path 变量,而 file_name 变量是只读的。
有没有关于共享内存的很好的教程和示例代码(如果可能),你可以指导我吗?
【问题讨论】:
-
您可以考虑使用线程而不是进程。然后整个内存被共享,没有更多的技巧。
-
下面的答案讨论了 System V IPC 机制,
shmget()等。以及带有MAP_ANON(又名MAP_ANONYMOUS)的纯mmap()方法——尽管MAP_ANON不是由POSIX 定义的。还有用于管理共享内存对象的 POSIXshm_open()和shm_close()。 [...继续...] -
[...continuation...] 这些具有与 System V IPC 共享内存相同的优势——共享内存对象可以在创建它的进程的生命周期之后持续存在(直到某个进程执行
shm_unlink()),而使用mmap()的机制需要一个文件和MAP_SHARED来持久化数据(而MAP_ANON排除持久性)。在shm_open()规范的基本原理部分有一个完整的例子。
标签: c linux fork shared-memory