読み取り中のファイルへのファイルの移動


10

ファイルが移動され、宛先ファイルがすでに存在し、現在読み取られている場合、操作は成功しますか?宛先ファイルの読み取り操作がどのくらい続くかに依存しますか?

回答:


9

読み取り操作の完了にかかる時間に関係なく、読み取り操作は成功します。

これはなぜ、どのように機能しますか?

読み取り操作が開始されると、ファイルのInodeがファイルのコンテンツが読み取られるハンドルとして使用されます。

別のファイルをターゲットファイルに移動すると、結果は新しいiノードになります。つまり、ディスク上のファイルの物理的なコンテンツが別の場所に配置され、読み取られているファイルの元のコンテンツは変更されません。

それらが共通している唯一のものは、それらのパス/ファイル名ですが、ディスク上の基礎となるiノードと物理的な場所は変わります。

読み取り操作が終了すると(他のプロセスで古いファイルのオープンファイルハンドルがまだなく、そのiノードを参照する他のハードリンクがない場合)、古いデータは破棄されます。

移動操作が完了すると、ファイルには新しいiノードインデックス番号が付けられます。

を使用して、ファイルのiノードインデックス番号を表示できますls -i /tmp/some-file

上記と同じ理由で、ファイルを参照している間、ファイルを使用するアプリケーションはiノードから(ディスク上の実際のファイルの内容を指している)を読み取るだけなので、アプリケーションによってまだ使用されているファイルを削除することができます。ファイルシステムで削除されます。


1
ハードリンクについて言及するのを忘れていました。読み取り操作が終了したときに、そのiノードが別のディレクトリエントリからリンクされている場合、データは削除されません(まだ名前があるため)。
cjm 2013

指摘いただきありがとうございます。私の回答を編集して追加しました。
エリアスプロブスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.