Linuxmmap(2)
表示:
MAP_PRIVATE
创建写映射时的专用副本。映射的更新对于映射同一文件的其他进程是不可见的,并且不会传递到基础文件。未指定mmap()
调用后对文件所做的更改在映射区域中是否可见。
我特别问这个部分:"对于映射同一文件的其他进程不可见">
但是这个过程中同一文件的其他映射呢
我理解"更改。。。不被携带到底层文件">,但这并不能清楚地表明这些更改是否会影响同一文件的其他映射。
以下相关问题不能回答这个问题:
- 查询MAP_PRIVATE
- 写入MAP_PRIVATE mmaped文件
- 线程的mmap中MAP_PRIVATE和MAP_SHARED之间的差异
Nate Eldredge指出POSIX mmap规范也没有指定这种行为,只指出:
如果指定了
MAP_PRIVATE
,则调用进程对映射数据的修改应仅对调用进程可见,并且不应更改底层对象。
我认为
不应更改底层对象
明确了意图。当您在同一过程中再次mmap
相同的底层对象时,您再次制作了底层对象的映射,其内容由该底层对象的内容决定。
诚然,它可以/应该更清楚。