我正在开发一个基于Perl的文件同步工具。它将文件下载到一个临时目录中(保证与实际文件在同一文件系统上),然后将临时文件移动到原来的位置,保留权限、所有权和ACL等元数据。我想知道如何在Linux上完成最后一步。
在Mac OS X上,至少在C语言中,我会使用exchangedata函数。它接受两个文件名作为参数并交换它们的内容,保留除mtime之外的所有元数据。它保证操作是原子的——所有读取器将只看到旧文件或新文件,永远不会看到其间的内容。不幸的是,我认为它在Linux上不可用。
我知道rename可以原子地移动,但它不能保存元数据。另一方面,我可以打开文件并用新文件的内容覆盖数据,这将保留所有元数据,但不是一个原子操作。有什么建议解决这个问题吗?
在Mac OS X上,至少在C语言中,我会使用exchangedata函数。它接受两个文件名作为参数并交换它们的内容,保留除mtime之外的所有元数据。它保证操作是原子的——所有读取器将只看到旧文件或新文件,永远不会看到其间的内容。不幸的是,我认为它在Linux上不可用。
我知道rename可以原子地移动,但它不能保存元数据。另一方面,我可以打开文件并用新文件的内容覆盖数据,这将保留所有元数据,但不是一个原子操作。有什么建议解决这个问题吗?