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

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

的手冊頁cp(1)

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

但是,下面的情況是不是也有可能發生呢?

  1. cp檢查文件是否存在,假設該文件尚不存在
  2. 其他一些進程寫入同一路徑,因此現在有資料寫入之前不存在的文件
  3. 由於cp不知道現在存在的文件,因此它會覆蓋數據

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

答案1

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

相關內容