finefoot Asked: 2020-03-10 11:00:04 +0800 CST2020-03-10 11:00:04 +0800 CST 2020-03-10 11:00:04 +0800 CST `cp --no-clobber` 是否容易受到竞争条件的影响? 772 手册页cp(1)说 --no-clobber不要覆盖现有文件 但是,下面的情况是不可能的吗? cp检查文件是否存在,假设文件不存在(还) 其他一些进程写入相同的路径,所以现在有数据写入以前不存在的文件 由于cp不知道现在存在的文件,它会覆盖数据 是否cp --no-clobber容易受到这种竞争条件的影响?如果没有,如何cp避免上述情况? linux shell 1 个回答 Voted Best Answer Stephen Kitt 2020-03-10T11:45:47+08:002020-03-10T11:45:47+08:00 cp不容易受到这种竞争条件的影响。设置时--no-clobber,检查目的地是否已经存在;如果它确定它没有,因此它应该继续复制,它会记住它应该复制到一个新文件。当需要打开目标文件时,它会使用强制创建的标志打开它,O_CREAT并且O_EXCL; 然后操作系统在打开文件时检查文件是否不存在,如果存在则失败 ( EEXIST)。
cp
不容易受到这种竞争条件的影响。设置时--no-clobber
,检查目的地是否已经存在;如果它确定它没有,因此它应该继续复制,它会记住它应该复制到一个新文件。当需要打开目标文件时,它会使用强制创建的标志打开它,O_CREAT
并且O_EXCL
; 然后操作系统在打开文件时检查文件是否不存在,如果存在则失败 (EEXIST
)。