cp(1)
のmanページには、
--no-clobber
既存のファイルを上書きしません
しかし、次のシナリオは可能ではないでしょうか?
cp
は、ファイルの存在を確認します。ファイルが存在しない(まだ)としましょう。cp
は現在存在するファイルを認識していないため、データを上書きしますはcp --no-clobber
この競合状態に対して脆弱ですか?そうでない場合、cp
は上記の状況をどのように回避しますか?
cp
はこの競合状態に対して脆弱ではありません。いつ --no-clobber
が設定されている場合、宛先がすでに存在するかどうかを確認します。そうでないと判断してコピーを続行する必要がある場合は、新しいファイルにコピーする必要があることを記憶しています。宛先ファイルを開くときが来たら、 ファイルの作成を強制するフラグでファイルを開きます 、 O_CREAT
およびO_EXCL
;次に、オペレーティングシステムは、ファイルが存在しないことを確認しますファイルを開いている間。存在する場合は失敗します(EEXIST
)。