Linux
cp --no-clobber
是否容易受到競爭條件的影響?
手冊頁
cp(1)
說
--no-clobber
不要覆蓋現有文件但是,下面的情況是不可能的嗎?
cp
檢查文件是否存在,假設文件不存在(還)- 其他一些程序寫入相同的路徑,所以現在有數據寫入以前不存在的文件
- 由於
cp
不知道現在存在的文件,它會覆蓋數據是否
cp --no-clobber
容易受到這種競爭條件的影響?如果沒有,如何cp
避免上述情況?
cp
不容易受到這種競爭條件的影響。設置時--no-clobber
,檢查目的地是否已經存在;如果它確定它沒有,因此它應該繼續複製,它會記住它應該複製到一個新文件。當需要打開目標文件時,它會使用強制創建的標誌打開它,O_CREAT
並且O_EXCL
; 然後作業系統在打開文件時檢查文件是否不存在,如果存在則失敗 (EEXIST
)。