假设文件被替换(同名)批发而不是就地修改(即创建一个temp然后重命名为filename).
我想这个更改不会影响本地mmap,因为内核仍然有磁盘上旧文件(inode)的句柄.
但是,由于NFS是无状态的,mmap是否会在mmap的(长)生命周期内混淆并混淆旧/新文件内容?
在我看来,read/readv是处理NFS挂载文件的唯一安全方法.
如果您对文件有一个开放引用,那么只要引用存在,该引用将继续引用同一文件,即使该文件本身被删除或重命名,即使其名称在以后被一个全新的文件重用它被删除了.引用可以是文件描述符或内存映射.这是POSIX的一部分,无论使用何种类型的文件系统,它都是真的(或应该是!).
换句话说:如果在NFS文件系统上打开文件并将其映射到内存中,只要不取消映射,就可以继续使用该内存映射,即使某些其他进程(或同一进程)删除也是如此该文件并将其替换为具有相同名称的新文件.
确实,NFS协议是无状态的,因此实现必须采取特殊步骤以确保正确处理此案例.自从我查看它是如何完成以来已经很长时间了,但是我最后一次(在Solaris上),通过将文件重命名为特殊隐藏名称(.nfsXXXXX
)而不是在链接计数减少到零时删除它们来完成仍有公开提及他们.无论如何,无论实现使用什么技巧,您作为文件系统的用户都不应该担心它.
归档时间: |
|
查看次数: |
1824 次 |
最近记录: |