mmap():如果底层文件发生变化(收缩)会发生什么?

zer*_*lus 5 c++ linux mmap

如果你使用mmap()对内存映射文件,但是底层文件会变得更小.如果您访问从文件中删除的内存偏移量会发生什么?

osg*_*sgx 4

IBM 表示它未定义http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fapis%2Fmmap.htm

如果在 mmap() 之后映射文件的大小减小,则尝试超出文件末尾的引用是未定义的,并且可能会导致 MCH0601 异常。

如果 mmap() 函数完成后文件的大小增加,则将无法通过映射访问超出文件原始末尾的整个页面。

SingleUnixSpecification 中也有同样的说法:http://pubs.opengroup.org/onlinepubs/7908799/xsh/mmap.html

如果在调用 mmap() 后由于对映射文件执行某些其他操作而导致映射文件的大小发生变化,则对映射区域中与文件的添加或删除部分相对应的部分的引用的影响是未指定

“未定义”或“未指定”意味着 - 允许操作系统开始格式化磁盘或任何内容。最有可能的是 SIGSEGV 杀死了您的应用程序。