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