小编典典

是否named()是原子的?

linux

我无法通过实验进行检查,也无法从手册页中收集到它。

说我有两个过程,一个是将文件1从目录1移动(重命名)到目录2。假设正在运行的另一个进程同时将directory1和directory2的内容复制到另一个位置。复制是否可能以这种方式发生,即目录1和目录2都将显示文件1-即,目录1在移动之前被复制,目录2在移动之后被第一个进程复制。

基本上,rename()是原子系统调用吗?

谢谢


阅读 274

收藏
2020-06-02

共1个答案

小编典典

是的,没有。

假设操作系统不会崩溃,rename()是原子的。它不能被任何其他文件系统操作分割。

如果系统崩溃,您可能会看到ln()操作。

还要注意,在网络文件系统上操作时,如果操作成功完成,您可能会收到ENOENT。本地文件系统无法做到这一点。

2020-06-02