我总是好奇文件删除对内存映射文件的影响。
我查看了文档,发现只要映射的文件在内存中没有任何脏范围,它就可以被删除。
但是,如果在磁盘文件范围(不在内存中)被删除后,我尝试读取它,会怎么样?
一项实验表明,即使在删除之后,文件仍然可读:
map = (char *) mmap(0, fileInfo.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
remove(fd);
for (int i = 0; i < fileInfo.st_size/4; i++)
{
printf("%lu", map[i]);
}
我的问题是删除是否在执行之前等待munmap/close,即使文件已经从目录树中删除。