我无法通过实验来判断这一点,也无法从手册页中收集它.
假设我有两个进程,一个进程将file1从directory1移动(重命名)到directory2.假设另一个进程同时运行,将directory1和directory2的内容复制到另一个位置.复制的方式是否可能使directory1和directory2都显示file1,即directory1在移动前复制,directory2在移动后由第一个进程复制.
基本上是rename()是一个原子系统调用吗?
谢谢
我无法通过实验来判断这一点,也无法从手册页中收集它.
假设我有两个进程,一个进程将file1从directory1移动(重命名)到directory2.假设另一个进程同时运行,将directory1和directory2的内容复制到另一个位置.复制的方式是否可能使directory1和directory2都显示file1,即directory1在移动前复制,directory2在移动后由第一个进程复制.
基本上是rename()是一个原子系统调用吗?
谢谢
是和否.
rename()是原子的,前提是操作系统不会崩溃.它不能被任何其他文件系统操作拆分.
如果系统崩溃,您可能会看到一个ln()操作.
另外请注意,在网络文件系统上操作时,如果操作成功,您可能会得到eOne.本地文件系统不能这样对你.