我无法通过实验进行检查,也无法从手册页中收集到它。
说我有两个过程,一个是将文件1从目录1移动(重命名)到目录2。假设正在运行的另一个进程同时将目录1和目录2的内容复制到另一个位置。复制是否可能以这种方式进行,即目录1和目录2都将显示文件1-即,在移动之前复制目录1,而在第一个过程中移动目录2。
基本上,rename()是原子系统调用吗?
谢谢
最佳答案
是的,没有。
假设操作系统不会崩溃,rename()是原子的。它不能被任何其他文件系统操作分割。
如果系统崩溃,您可能会看到ln()操作。
另请注意,在网络文件系统上进行操作时,如果操作成功完成,则可能会收到ENOENT。本地文件系统无法做到这一点。