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