超出文件末尾的mmap

var*_*unr 5 unix file-io mmap

我已经使用mmap()将文件映射到内存,并且需要写超出文件末尾的内容。在这种情况下,我找不到任何确定性的文档证据。该文档说,超出EOF的访问权限是未定义的。有什么正确的方法吗?

Ale*_*x I 5

取消映射该文件,通过任何常规方式扩展它(fseek to end + fwrite)并再次映射它。这应该是相当快的;文件中被分页的任何部分都将保持分页状态。

您还可以在映射文件时扩展该文件,然后重新映射它。这应该可以正常工作,因为您没有更改任何映射的页面。其效果可能取决于操作系统。

Linux mmap 手册页

更改映射的基础文件大小对与文件的添加或删除区域相对应的页面的影响尚未指定。