gpt4 book ai didi

linux - 在 Linux 上保存原子文件而不丢失元数据

转载 作者:IT王子 更新时间:2023-10-29 00:19:52 29 4
gpt4 key购买 nike

我正在研究基于 Perl 的文件同步工具。它将文件下载到一个临时目录(保证与真实文件位于同一文件系统上),然后将临时文件移动到旧文件之上,保留权限、所有权和 ACL 等元数据。我想知道如何在 Linux 上实现最后一步。

在 Mac OS X 上,至少在 C 中,我会使用 exchangedata 函数。这将两个文件名作为参数并交换它们的内容,使所有元数据(mtime 除外)保持不变。它保证操作是原子的——所有读者将看到旧文件或新文件,而不会看到介于两者之间的东西。不幸的是,我认为它在 Linux 上不可用。

我知道 rename 以原子方式移动,但它不保留元数据。另一方面,我可以打开文件并用新文件的内容覆盖数据,这将保留所有元数据但不是原子操作。对解决这个问题有什么建议吗?

最佳答案

我在这里看到的唯一方法是从要替换的文件中读取元数据,将其应用于临时文件,然后将临时文件重命名为旧文件。 (显然,rename 保留了源文件属性。)

关于linux - 在 Linux 上保存原子文件而不丢失元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1693904/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com