代码之家  ›  专栏  ›  技术社区  ›  Irad K

macos中的mmap和文件删除

  •  0
  • Irad K  · 技术社区  · 6 年前

    我总是好奇文件删除对内存映射文件的影响。

    我查看了文档,发现只要映射的文件在内存中没有任何脏范围,它就可以被删除。 但是,如果在磁盘文件范围(不在内存中)被删除后,我尝试读取它,会怎么样?

    一项实验表明,即使在删除之后,文件仍然可读:

    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,即使文件已经从目录树中删除。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Luis Colorado    6 年前

    ln 0