Linux

cp --no-clobber 是否容易受到競爭條件的影響?

  • March 10, 2020

手冊頁cp(1)

--no-clobber不要覆蓋現有文件

但是,下面的情況是不可能的嗎?

  1. cp檢查文件是否存在,假設文件不存在(還)
  2. 其他一些程序寫入相同的路徑,所以現在有數據寫入以前不存在的文件
  3. 由於cp不知道現在存在的文件,它會覆蓋數據

是否cp --no-clobber容易受到這種競爭條件的影響?如果沒有,如何cp避免上述情況?

cp不容易受到這種競爭條件的影響。設置時--no-clobber,檢查目的地是否已經存在;如果它確定它沒有,因此它應該繼續複製,它會記住它應該複製到一個新文件。當需要打開目標文件時,它會使用強制創建的標誌打開它O_CREAT並且O_EXCL; 然後作業系統在打開文件時檢查文件是否不存在,如果存在則失敗 ( EEXIST)。

引用自:https://unix.stackexchange.com/questions/572025