我正在编写一个C程序,它使用mmap系统调用,运行在Linux3.12-64位上。
如果我有两个进程对磁盘文件的相同区域进行读/写访问,然后同时修改两个进程的区域内容.
发布于 2013-12-28 05:44:56
是的,这是内存映射的目的之一:作为“瞬时IPC”的一种形式。
必须设置MAP_SHARED标志:
如果您希望为此目的使用共享内存,我将考虑使用shminit()/shmat() API:
建议:查看Beej的*nix进程间通信指南:
不,如果使用原始mmap() API,则不存在“前后保证”,如果希望同时读取/写入数据,则必须使用某种类型的锁定(例如信号量)。
同时,来自理解内存映射
mmap和shmat服务都为多个进程提供了映射一个对象的相同区域的功能,这样它们就可以共享到该对象的可寻址性。然而,mmap子例程将此功能扩展到shmat子程序提供的能力之外,允许建立相对无限数量的此类映射。虽然这种功能增加了每个文件对象或内存段支持的映射数,但对于许多进程将相同的文件数据映射到其地址空间的应用程序来说,这可能是效率低下的。 mmap子例程为映射到对象的每个进程提供唯一的对象地址。该软件通过为每个进程提供一个唯一的虚拟地址(称为别名)来实现这一点。shmat子例程允许进程共享映射对象的地址。
对于任何*nix变体,包括Linux和AIX,上述都是正确的。
https://stackoverflow.com/questions/20811434
复制相似问题