1

fsyncへの呼び出しの前にへの呼び出しを発行しfstatて、ターゲット ファイルのファイルサイズを決定するレガシー コードがあります。(具体的には、コードは stat 構造体から st_size にのみアクセスしています。)

ドキュメントを見て、これは必要な電話だとは思いませんが、専門家の意見が欲しかったのです。

4

1 に答える 1

1

正しく実装されたファイルシステムでは、fsyncorへの呼び出しを発行しても、fdatasync後続の // 呼び出しの結果に影響を与えるべきではありませstatん。その唯一の効果は、フラッシュされていない書き込みと、の場合は変更されたメタデータが永続的なストレージにコミットされることです。そして、そのバリアントは、実際のデータが永続的なストレージに作成されたかどうかに関係なく、キャッシュされた書き込みで問題なく動作します。fstatlstatfsyncstat

とはいえ、あなたが勉強しているコードで が必要かどうかfstatはセマンティクスの問題であり、 の結果がどのようにfstat使用されるかに依存します。例えば:

  • fsyncで現在のメタデータを取得できるようにするために呼び出す必要があるという誤解のために使用されている場合はstat、おそらく削除できます。

  • たとえば、ある種のチェックポイントデータを書き込むために使用される場合、呼び出し順序を逆にする必要があるかもしれませんが、まったく無関係ではありません。を呼び出してから* を呼び出してから、チェックポイント情報を書き込むのfstatにかなっています。fsync

  • I/O バウンド操作の何らかの UI 進行状況モニターとして使用する場合、実際にディスクにコミットされたデータの量を表示するのが理にかなっている場合があります。ただし、その場合、モニターの精度は重要ではないため、呼び出し順序はそれほど重要ではありません。

では、あなたのケースで使用された結果はどうですか?fstat

免責事項:ファイルシステムの実装が存在する可能性があります。たとえば、呼び出しfsyncによってファイルのローカル クライアント メタデータ キャッシュが更新される可能性がある、ネットワーク化された/分散型の実装です。その場合、そのfsync呼び出しは実際にコードの信頼性を向上させる可能性があります。ただし、その場合は、パフォーマンスの問題よりも深刻な問題が発生している可能性があります...

于 2013-02-15T17:47:23.190 に答える