5

fsync(2) マンページは、ファイルが同期されている場合、同期ディレクトリが明示的に必要であることを示しています。

io パッケージの Java の sync メソッドはどうですか? それは気にしますか?OSやファイルシステムに依存しますか?

http://docs.oracle.com/javase/7/docs/api/java/io/FileDescriptor.html#sync ...に役立つものは何も見つかりませんでした...

4

1 に答える 1

1

fsyncマニュアルページには、ファイルを呼び出してfsyncも、関連するディレクトリも fsync されるわけではないと記載されています。必要に応じfsyncて、ディレクトリに対して呼び出す必要があります。

その定義/動作にはいくつかの正当な理由があります。

  1. ファイルを開くために使用されたディレクトリが、OS に認識されなくなっている可能性があります。
  2. ファイルとディレクトリの関係は 1:1 ではありません。問題のファイルは、ハード リンクを介して複数のディレクトリから参照される可能性があります。file-fsync がすべての参照ディレクトリを同期することが保証される場合、ファイル システムはそれらすべての参照の場所を認識している必要があります。通常、ディレクトリからファイルへの方向のみがファイル システムに認識されます。
  3. ファイルに関連付けられたディレクトリ エントリが既にディスクに書き込まれている場合、file-fsync が要求されるたびにディレクトリを fsync しても意味がありません。これは不要なパフォーマンス ヒットになります。

それはさておき、Java の定義/動作を調べてみましょう。

JavaDoc は、ディレクトリなどの関連するファイルシステム オブジェクトに関して何も言及していません。FileDescriptorさらに、ディレクトリのインスタンスを取得する方法がわかりません。

ソース コードに基づいて OpenJDK 実装の動作を見ると、UNIX とWindows でjava.io.FileDescriptor.sync()単純にトリガーされます。fsyncFlushFileBuffers

いいえ、java.io.FileDescriptor.sync()関連するディレクトリにはまったく影響しません。

于 2020-05-09T16:18:44.813 に答える