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) (または類似) が返されると、出力データおよび関連ファイルメタデータが基本ハードウェアに転送されました。
ファイルシステム別:(ext2、ext3、fat、vfat、ufsのみサポート)同期オプション山(または
/etc/fstab
)各ファイルとext2 基本ファイルシステムにのみ適用されます。設定としてS属性記録したもの
chattr +S
「S」属性が設定されているファイルが変更されると、変更はディスクに同期的に書き込まれます。これは、ファイルサブセットに適用される「同期」マウントオプションと同じです。
これらの同期更新の場合はそうです。stat
一部の更新後、リクエストにwrite
変更が反映されます。
非同期:デフォルトでは、メタデータコミットはデータ変更のためトリガーされません。この場合(最新)ファイルシステムに関係なく、連続統計は変更のみを反映します...純粋にチャンス......