`cp --no-clobber`は競合状態に脆弱ですか?

`cp --no-clobber`は競合状態に脆弱ですか?

マニュアルページcp(1)説明する

--no-clobber既存のファイルを上書きしないでください

ところで、以下のような状況が可能でしょうか?

  1. cpファイルがすでに存在しないとし、ファイルが存在することを確認します。
  2. 他のプロセスが同じパスに書き込むため、以前は存在しなかったファイルにデータが書き込まれます。
  3. cp現在のファイルが存在するかどうかわからないため、データを上書きします。

cp --no-clobberこの競争条件に脆弱ですか?そうでなければ、cp上記の状況を避ける方法は何ですか?

ベストアンサー1

cpそのような競争条件に脆弱ではありません。設定されている場合は--no-clobber、ターゲットがすでに存在することを確認し、存在しないためコピーを続ける必要があると判断した場合は、新しいファイルにコピーする必要があることを覚えておいてください。ターゲットファイルを開く必要がある場合、生成を強制するフラグで開きます。O_CREATそしてO_EXCL;その後、オペレーティングシステムはファイルが存在しないことを確認します。それを開くときEEXIST、成功すると失敗します()。

おすすめ記事