例如,我使用mmap以只读共享模式将文件映射到内存中。我根据它们在内存中的地址读取文件上的一些数据。如果之后我调用write和fsync来更新或更改基础文件怎么办?存储器中的数据也会改变吗?还是我需要调用其他系统调用来同步映射的内存?我在阅读BoltDB的源代码时发现了这个问题。
答案 0 :(得分:0)
当我阅读boltdb的源代码时,同样的问题困扰着我。我在Google上搜索/评论了很多文章,但仍然没有得到答案。
我知道linux有一个dnotify
/ inodtify系统来监视文件更改,因此可以确保内核知道对文件所做的更改。
man page for mmap没有描述这里提到的饱足感,但是MAP_SHARED的描述确实提到了
对映射的更新对于映射同一区域的其他进程是可见的,并且(在文件支持的映射的情况下)将一直进行到基础文件。
我认为应该合理地猜测MAP_SHARED保证对所有映射的内存区域都可以看到对基础文件所做的更改。希望有一天Linux内核专家可以对此提供一些详细信息。