假设一个进程执行此操作:mv
将一个大文件发送到目标目录
另一个进程正在目标目录中监视该文件,因为它想尽快读取其内容。文件系统是否确保第二个进程仅在文件完全可用时才“看到”该文件?
我查看了手册页,mv
但没有看到任何保证......
答案1
这在很大程度上取决于源文件和目标文件是否位于同一个文件系统上(在这种情况下rename(2)
完成,†这几乎是可以获得的最原子的操作)或不同的文件系统(根本不是原子的,并且进程可能很容易看到不完整的文件,特别是当系统或网络或文件系统很慢时)。
† 根据我多年前在 Linux 上所做的,因此不同的实现可能有所strace
不同。mv
mv