mmap local v/s nfs文件:在磁盘上替换基础文件时会发生什么?

Ben*_*aro 3 nfs mmap

假设文件被替换(同名)批发而不是就地修改(即创建一个temp然后重命名为filename).

我想这个更改不会影响本地mmap,因为内核仍然有磁盘上旧文件(inode)的句柄.

但是,由于NFS是无状态的,mmap是否会在mmap的(长)生命周期内混淆并混淆旧/新文件内容?

在我看来,read/readv是处理NFS挂载文件的唯一安全方法.

Cel*_*ada 6

如果您对文件有一个开放引用,那么只要引用存在,该引用将继续引用同一文件,即使该文件本身被删除或重命名,即使其名称在以后被一个全新的文件重用它被删除了.引用可以是文件描述符或内存映射.这是POSIX的一部分,无论使用何种类型的文件系统,它都是真的(或应该是!).

换句话说:如果在NFS文件系统上打开文件并将其映射到内存中,只要不取消映射,就可以继续使用该内存映射,即使某些其他进程(或同一进程)删除也是如此该文件并将其替换为具有相同名称的新文件.

确实,NFS协议是无状态的,因此实现必须采取特殊步骤以确保正确处理此案例.自从我查看它是如何完成以来已经很长时间了,但是我最后一次(在Solaris上),通过将文件重命名为特殊隐藏名称(.nfsXXXXX)而不是在链接计数减少到零时删除它们来完成仍有公开提及他们.无论如何,无论实现使用什么技巧,您作为文件系统的用户都不应该担心它.