我正在编写一个使用mmap
系统调用的C程序,在Linux 3.12 64位上运行。
如果我有两个进程mmaping具有读/写访问权限的磁盘文件的同一区域,然后同时修改两个进程的区域内容......
答案 0 :(得分:6)
是的,这是内存映射的目的之一:作为“瞬时IPC”的一种形式。
您必须设置MAP_SHARED标志:
如果您希望为此目的使用共享内存,我会考虑使用shminit()/ shmat()API:
建议:查看Beej的* nix进程间通信指南:
不,如果您使用原始mmap()API,则没有“之前/之后的保证”,如果您希望同时读取/写入数据,则必须使用某种锁定(例如信号量)。
此外,来自Understanding Memory Mapping:
mmap和shmat服务都提供了多个功能 映射对象的相同区域以便它们共享的过程 对该对象的可寻址性。但是,mmap子例程会扩展 超出shmat子程序所提供的能力 允许相对无限数量的此类映射 成立。虽然这种能力增加了映射的数量 支持每个文件对象或内存段,它可以证明是低效的 用于许多进程将相同文件数据映射到的应用程序 他们的地址空间。
mmap子例程为每个进程提供唯一的对象地址 映射到对象。该软件通过提供来实现这一点 每个进程都有一个唯一的虚拟地址,称为别名。该 shmat子例程允许进程共享映射的地址 对象。
以上适用于任何* nix变体,包括Linux和AIX。