gpt4 book ai didi

linux - 如何在没有竞争条件的情况下重命名()?

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

如果我想将 A 重命名为 B,但前提是 B 不存在,天真的做法是检查是否 B 存在(使用 access("B", F_OK) 或类似的东西),如果它不继续 rename。不幸的是,这会打开一个窗口,在此期间一些其他进程可能会决定创建 B,然后它会被覆盖 - 更糟糕的是,没有迹象表明曾经发生过类似的事情。

其他文件系统访问函数不受此影响 - openO_EXCL(因此复制文件是安全的),最近 Linux 得到了整个 *at 防止大多数其他竞争条件的系统调用 - 但不是这个特定的(renameat 存在,但防止完全不同的问题)。

那么它有解决方案吗?

最佳答案

您应该能够 link (2) 给新的文件名。如果链接失败,那么您将放弃,因为该文件已经存在。如果链接成功,您的文件现在将以旧名称和新名称存在。那你unlink (2)旧称。没有可能的竞争条件。

关于linux - 如何在没有竞争条件的情况下重命名()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222341/

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