当前位置: 技术问答>linux和unix
mmap文件映射的问题
来源: 互联网 发布时间:2016-07-18
本文导语: mmap()是不分配内存的?那么,把文件映射之后,如果被映射的文件被更改了,或者被删除了,mmap()返回的结果还正确可靠么? | 映射的文件 被改了 但是大小没变化 一般没什么问题 ,但...
mmap()是不分配内存的?那么,把文件映射之后,如果被映射的文件被更改了,或者被删除了,mmap()返回的结果还正确可靠么?
|
映射的文件 被改了 但是大小没变化 一般没什么问题 ,但是大小变化了,就得重新映射
删除的话就不用说俄
删除的话就不用说俄
|
mmap()调用的内核函数为do_mmap(),该函数linux实现续存映射的主要函数。
mmap()将磁盘上的文件内容映射到进程用户空间的虚存区,当进程对该空间进行写操作时才会分配物理内存。
即使被映射的文件被删除或者修改了,之前映射到进程用户空间的内容保持不变。
ftruncate是将文件的长度改为0,也就是删除文件的中的内容,此时,改变的首先是用户空间中的内容,是对你映射后的内容的修改。
报错的原因是因为你映射时使用了PROT_READ 读的方式!