gpt4 book ai didi

新引用现有文件时linux api重命名行为

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:28 25 4
gpt4 key购买 nike

当我在页面 https://linux.die.net/man/3/rename 中阅读关于 rename 的文档时, 我发现了以下内容

If the link named by the new argument exists, it shall be removed and old renamed to new. In this case, a link named new shall remain visible to other processes throughout the renaming operation and refer either to the file referred to by new or old before the operation began. Write access permission is required for both the directory containing old and the directory containing new.

下面应该怎么理解

refer either to the file referred to by new or old before the operation began

在这种情况下,存在一个与 new 点同名的文件,然后在重命名操作之后,new 应该指向 oldnew。但是文档说它是 在操作开始之前 这让我很困惑。

我该如何理解?你能举个例子吗?

最佳答案

这个短语的意思是,在rename 期间,旧的new 被新的new 自动替换。

这意味着在重命名操作期间,尝试访问 new 不会导致文件未找到错误。每次访问都会导致返回旧的或新的 new

rename 完成后(假设它成功完成),当然新的 new 将在该名称下被引用。

这突出了 rename 在自动替换文件方面的有用性。如果您有一个包含一些重要文件的路径,并且您需要更新该文件,那么无论发生什么情况,任何人在任何时候打开 /var/lib/important 都会得到旧的或新版本,这是您需要执行的操作顺序:

  • 使用路径 /var/lib/important.new 创建文件的更新版本。
  • 刷新并关闭 /var/lib/important.new
  • 重命名("/var/lib/important.new", "/var/lib/important");
  • 根据您的用例,刷新 /var/lib

这保证了无论发生什么情况(进程崩溃、电源故障、内核故障),旧文件或新文件都可用、完整且正确。

最后一步(刷新目录)只有在您需要依赖它作为可用文件的新版本时才有必要。如果不这样做,电源故障可能会导致旧文件在重新启动后重新出现。典型用途无需理会此步骤。

关于新引用现有文件时linux api重命名行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46729287/

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