`cp --no-clobber` 容易受到竞争条件的影响吗?

`cp --no-clobber` 容易受到竞争条件的影响吗?

的手册页cp(1)

--no-clobber不要覆盖现有文件

但是,下面的情况是不是可能发生呢?

  1. cp检查文件是否存在,假设该文件尚不存在
  2. 其他一些进程写入同一路径,因此现在有数据写入之前不存在的文件
  3. 由于cp不知道现在存在的文件,因此它会覆盖数据

cp --no-clobber容易受到这种竞争条件的影响吗?如果不是的话,如何cp避免上述情况呢?

答案1

cp不容易受到这种竞争条件的影响。设置时--no-clobber,检查目的地是否已存在;如果它确定没有,因此应该继续复制,它会记住它应该复制到新文件。当需要打开目标文件时,它用强制其创建的标志打开它,O_CREATO_EXCL;然后操作系统检查该文件不存在打开它时EEXIST,如果成功则失败 ( )。

相关内容