stat(2) 書き込み後の読み取りは write(2) と一致しますか?

stat(2) 書き込み後の読み取りは write(2) と一致しますか?

man 2 write状態:

POSIX では、write() 戻り後に発生する read(2) が新しいデータを返すことを証明できなければなりません。すべてのファイルシステムがPOSIXと互換性があるわけではありません。

stat(2)Linuxでは、これはfstat(2)特にメンバーにも適用されますかstat.st_size
具体的には、statまたはfstatを使用してファイルを開き、そのファイルに948427バイトを書き込むと、948427バイトがO_CREAT表示されますか? (もしそうなら、これはPOSIXファイルシステムの保証ですか、それとも通常のLinuxファイルシステムが実際に提供しているのでしょうか、それとも他のファイルシステムではないいくつかのファイルシステムの属性ですか?)st_size

答え1

stat以下から検索st_sizeなどの情報(メタデータ)インデックスノード:

...各ファイルには、ファイルのメタデータを含むinodeがあります。アプリケーションは、stat構造体を返すstat(2)(または関連する呼び出し)を使用してこのメ​​タデータを取得できます。

したがって、すべてが1つの質問に帰結します。成功後はいつinodeを更新する必要がありますかwrite?可能:

同期的にwrite:メタデータは返される前にデータと同期的に送信されます。

  • 各ファイルは以下を使用します。O_SYNCいつ表示開いている- 文書

write(2) (または類似) が返されると、出力データおよび関連ファイルメタデータが基本ハードウェアに転送されました。

「S」属性が設定されているファイルが変更されると、変更はディスクに同期的に書き込まれます。これは、ファイルサブセットに適用される「同期」マウントオプションと同じです。

これらの同期更新の場合はそうです。stat一部の更新後、リクエストにwrite変更が反映されます。

非同期:デフォルトでは、メタデータコミットはデータ変更のためトリガーされません。この場合(最新)ファイルシステムに関係なく、連続統計は変更のみを反映します...純粋にチャンス......

関連情報