用地址访问一段文件
Linux的mmap可把文件中从某个偏移开始的区域映射到进程地址空间,并设置读取、写入或执行保护。程序随后通过相应地址访问内容,不必为每一次读取都显式调用read。
映射仍受页面和权限规则约束。建立映射并不意味着所有页面已经常驻内存,也不取消后续缺页处理。mmap成功后关闭原文件描述符,一般不会因此使已建立的映射失效。
参考:[1]
写回与访问边界需核对
Linux的msync可请求把相应内存修改同步回文件,MS_SYNC等待指定更新完成,MS_ASYNC有不同返回语义。写进映射、内容对其他进程可见和已经满足持久化要求,应按接口分别判断。
访问映射文件结尾以外的页面还可能触发SIGBUS等错误;文件大小变化与映射长度也需协调。因此内存映射提供一种访问机制,不能消除存储错误、范围检查与恢复设计。