Bre*_*don 8 linux macos perl file atomic
我正在研究基于Perl的文件同步工具.它将文件下载到临时目录(保证与真实文件位于同一文件系统上),然后将临时文件移动到旧文件系统上,保留权限,所有权和ACL等元数据.我想知道如何在Linux上实现最后一步.
在Mac OS X上,至少在C中,我会使用该exchangedata
功能.这需要两个文件名作为参数并交换其内容,使所有元数据(除了mtime)保持不变.它保证操作是原子的 - 所有读者都会看到旧文件或新文件,从不介于两者之间.不幸的是,我不认为它可以在Linux上使用.
我知道它rename
会以原子方式移动,但它不会保留元数据.另一方面,我可以打开文件并使用新文件的内容覆盖数据,这将保留所有元数据,但不会是原子操作.有关解决这个问题的任何建议吗?
我在这里看到的唯一方法是从您要替换的文件中读取元数据,将其应用于临时文件,然后在旧文件上重命名临时文件.(rename
显然保留了源文件属性.)