我已经编写了一个程序,它会定期更新文件,有时我想将文件复制到另一台计算机上以检查其内容。如果我在程序没写的时候复制了文件,那就没问题了。但是,如果我在程序写入时复制了文件,则复制的文件将是部分文件。所以,我想知道,如果Linux系统存在锁定策略以防止这种情况发生。
实际上,我在bash脚本中复制文件,所以我想检查程序是否在bash脚本中编写它。如果是,则bash脚本将在几秒钟后检查其状态,然后复制其完成的版本。那么在bash脚本中,我们如何检查文件是否被其他程序打开或修改过?
答案 0 :(得分:3)
您可以从脚本中检查文件是否正在写入,如果是,则中止/暂停复制...
fuser -v /path/to/your/file | awk 'BEGIN{FS=""}$38=="F"{num++}END{print num}'
如果输出较小1,您可以复制:)
答案 1 :(得分:0)
当您的代码写入文件时,它实际上会写入内存中的输出缓冲区。当缓冲区变满时,缓冲区将被刷新到磁盘。因此,当您复制缓冲区尚未刷新到磁盘的文件时,您将观察到部分文件。
您可以使用对setvbuf
的调用来修改缓冲区大小。如果将缓冲区大小设置为零,则会在写入时将其刷新。您可以做的另一件事是调用fflush()
将输出刷新到磁盘。这两个中的任何一个都应该在写入时更新文件。