的手册页cp(1)
说
--no-clobber
不要覆盖现有文件
但是,下面的情况是不是可能发生呢?
cp
检查文件是否存在,假设该文件尚不存在- 其他一些进程写入同一路径,因此现在有数据写入之前不存在的文件
- 由于
cp
不知道现在存在的文件,因此它会覆盖数据
cp --no-clobber
容易受到这种竞争条件的影响吗?如果不是的话,如何cp
避免上述情况呢?
答案1
cp
不容易受到这种竞争条件的影响。设置时--no-clobber
,检查目的地是否已存在;如果它确定没有,因此应该继续复制,它会记住它应该复制到新文件。当需要打开目标文件时,它用强制其创建的标志打开它,O_CREAT
和O_EXCL
;然后操作系统检查该文件不存在打开它时EEXIST
,如果成功则失败 ( )。