私はJavaのFiles.walkFileTreeを使用して特定のディレクトリの* .csvファイルを定期的にスキャンしてから読み取ります。
私はmvが原子的であることを知っています(少なくとも同じデバイス内では)。したがって、「mv」ファイルは競合状態の面で問題にならないはずです。
cp操作を実行すると、cpは最初に別のファイル名にコピーし、元の名前に対してアトミックmv操作を実行しますか?それとも、読んで書くことは直接競争条件を引き起こしますか?
tar&gz を使用してファイルを別のディレクトリに抽出するのと同じ問題があります。
PS。答えがオペレーティングシステムによって異なる場合、私はCentOS 6で作業しています。また、可能であれば、Windowsの回答にも言及できますか?
答え1
GNUcp
とGNU tar
(CentOSを含むほとんどのLinuxディストリビューションの標準実装)では、ファイルを内部で生成します。他のほとんどの実装でも同様であると確信しています。しかし、機能的にアトミックにするためにラッパースクリプトを書くことはそれほど難しくありません。 Windowsについてはよくわかりませんが、よくわかりません。考えるこれは、POSIXがファイルシステム操作のアトミック性を提供する追加の保証を提供します。
mv
これは、ファイルシステムの境界を超えない場合にのみアトミックであることにも注目する価値があります。それ以外の場合は、cp
ソースファイルを実行してからリンクを解除するのと同じです。