我问这个问题是为了了解当我在我的 Linux 机器上运行备份时访问和编辑文件需要多小心。如果我在压缩文件时打开或编辑它们,压缩过程(特别是 zip)或文件会发生什么情况?
更新:我只是在压缩文件时删除了一个文件。Zip 立即停止处理该文件,并警告我文件大小已更改。
Linux 使用咨询锁,因此实际上没有什么可以阻止您修改正在被另一个进程读取/写入的文件。如果您的程序锁定了他们正在处理的文件,则两者之一会抱怨该文件正在被其他程序打开。
同时修改文件时通常会发生数据损坏。无论如何,这很少见,因为文件很少被修改。最常见的情况是原始文件被删除/截断,并在其位置添加了一个新文件。当一个文件被删除时,Linux 会为新文件分配一个新的 inode,因此,旧文件仍然可以被其先前的 inode 访问。当文件被截断时,它应该保持相同的 inode(不过我不确定)。无论如何,如果其他进程正在访问该文件,它将收到 I/O 错误,因为它位于位置 X,当它尝试读取位置 X+1 时,它会收到错误,因为文件现在的长度为 0 ,X+1 超出范围。通过检查情况,程序可以确定文件的大小发生了变化,这意味着它正在同时被修改。
总而言之,在 Linux 上,I/O 操作的同步是单个进程的责任,它可以向操作系统寻求帮助,但不是被迫的。