最新のmtimeを読むことができますが、読み取った内容はまだ更新されていませんか?

最新のmtimeを読むことができますが、読み取った内容はまだ更新されていませんか?

touchなどが関連付けられておらず、標準、、、、システムopenコールのみが含まれているとします。writecloselink

あるプロセスはファイルを更新し、もう一方は定期的にファイルがstat変更されたことを確認し、内容を再ロードします。最初のプロセスが書き込みを完了する前に2番目のプロセスが再ロードされた場合、ファイルは間違ったビューで終わる可能性がありますか?

主にLinux ext4ファイルシステムに焦点を当てていますが、この情報は他のファイルシステムと異なる場合に役立ちます。

ベストアンサー1

POSIXでは、次のように常に正しいデータを返すために書き込み後の読み取り()が必要です。http://pubs.opengroup.org/onlinepubs/007908799/xsh/write.html:

一般ファイルの write() が正常に返された後:

  • この書き込みで変更されたファイルの各バイト位置に対して成功した read() は、そのバイト位置が再び修正されるまで、その位置で write() で指定されたデータを返します。

Linuxでは、書き込みが完了するまでmtimeファイルは更新されません。してはいけない結果データを表示せずに更新されたmtimeを表示できます。それ時間に合わせて更新されます。

nbyteが0より大きい正常に完了すると、ファイルのst_ctimeフィールドとst_mtimeフィールドを更新するようにwrite()が表示されます。

Ext4はPOSIX規格に準拠しようとするので、この場合は安全でなければなりません。ただし、すべてのファイルシステムがPOSIX仕様に完全に準拠しているわけではないため、YMMVです。

おすすめ記事