在fsync中使用mmap是否安全? (fsync将使mmap上的某些页面无效吗?)

时间:2019-06-24 01:56:15

标签: linux go boltdb

例如,我使用mmap以只读共享模式将文件映射到内存中。我根据它们在内存中的地址读取文件上的一些数据。如果之后我调用write和fsync来更新或更改基础文件怎么办?存储器中的数据也会改变吗?还是我需要调用其他系统调用来同步映射的内存?我在阅读BoltDB的源代码时发现了这个问题。

1 个答案:

答案 0 :(得分:0)

当我阅读boltdb的源代码时,同样的问题困扰着我。我在Google上搜索/评论了很多文章,但仍然没有得到答案。

我知道linux有一个dnotify / inodtify系统来监视文件更改,因此可以确保内核知道对文件所做的更改。

man page for mmap没有描述这里提到的饱足感,但是MAP_SHARED的描述确实提到了

对映射的更新对于映射同一区域的其他进程是可见的,并且(在文件支持的映射的情况下)将一直进行到基础文件。

我认为应该合理地猜测MAP_SHARED保证对所有映射的内存区域都可以看到对基础文件所做的更改。希望有一天Linux内核专家可以对此提供一些详细信息。