我的一个项目有点问题。
我一直在尝试找到一个有据可查的示例,该示例将共享内存与 fork()
一起使用,但没有成功。
基本上情况是,当用户启动程序时,我需要在共享内存中存储两个值: current_path 是 char* 和 file_name 也是 char* 。
根据命令参数,新进程以 fork()
启动,该进程需要读取和修改存储在共享内存中的 current_path 变量,而 file_name 变量是只读的。
是否有一个关于共享内存的好教程以及您可以指导我的示例代码(如果可能)?
原文由 bleepzter 发布,翻译遵循 CC BY-SA 4.0 许可协议
有两种方法:
shmget
和mmap
。我将讨论mmap
,因为它更现代、更灵活,但如果您更愿意使用旧式工具,可以查看man shmget
( 或本教程) .mmap()
函数可用于分配具有高度可定制参数的内存缓冲区以控制访问和权限,并在必要时使用文件系统存储支持它们。以下函数创建一个进程可以与其子进程共享的内存缓冲区:
下面是一个使用上面定义的函数来分配缓冲区的示例程序。父进程会写一条消息,fork,然后等待其子进程修改缓冲区。两个进程都可以读取和写入共享内存。