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