以原子方式生成和复制文件的好策略是什么?

Modified on: Sat, 30 Jun 2018 11:45:00 +0800

我有一个文件myfile,必须定期重新生成。重新生成需要几秒钟。另一方面,我必须定期读取生成的最后一个(或倒数第二个)文件。保证我正在阅读一个完全生成的文件的最佳方法是什么?一旦我开始阅读它,我将能够完整地阅读它?

一种可能的解决方案是

  1. myfile实际上是指向上一个生成文件的软链接,例如myfile.last
  2. 重新生成在新文件上,例如myfile.new
  3. 重新生成后,myfile.new被移动到myfile.last
  4. 醇>

    我看到的问题(我不知道答案)是:如果另一个脚本在mv发生时复制myfilecp是否正确完成?

    另一种可能的解决方案是生成名称上带有时间戳的文件,例如myfile-2014-09-03_12:34myfile再次是一个软链接最后创建的文件。创建后应更改此链接以指向新文件。再说一次:

    之类的赔率是多少

    cp myfile anotherfile

    复制损坏的文件?

最佳答案

如果你在同一个文件系统中移动,mv是原子的 - 它只是一个重命名,而不是复制内容。所以,如果你们这一代的最后一步是:

mv myfile.new myfile.last

阅读过程将始终看到文件的旧版本或新版本,而不是任何不完整版本。

作者:Barmar

相关问答

添加新评论