我正在编写一个使用mmap
系统调用的C程序,该程序在64位Linux 3.12上运行。
如果我有两个进程使用读/写访问权限映射磁盘文件的同一区域,然后同时修改两个进程的区域内容...
是的,这就是内存映射的目的之一:作为“即时IPC”的一种形式。
您必须设置MAP_SHARED标志:
如果您希望为此目的使用共享内存,则可以考虑使用shminit()/ shmat()API:
建议:查看Beej的* nix进程间通信指南:
不,如果您使用原始的mmap()API,则没有“之前/之后保证”,并且如果您希望同时读取/写入数据,则必须使用某种锁定方式(例如信号量)。
另外,从了解内存映射:
mmap和shmat服务都为多个进程提供了映射对象同一区域的功能,以便它们共享对该对象的可寻址性。但是,mmap子例程通过允许建立相对无限数量的此类映射,将这种功能扩展到shmat子例程所提供的功能之外。尽管此功能增加了每个文件对象或内存段支持的映射数量,但对于许多进程将同一文件数据映射到其地址空间的应用程序来说,效率可能低下。
mmap子例程为每个映射到对象的进程提供唯一的对象地址。该软件通过为每个进程提供唯一的虚拟地址(称为别名)来实现此目的。shmat子例程允许进程共享映射对象的地址。
以上适用于所有* nix变体,包括Linux和AIX。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句