touch
などが関連付けられておらず、標準、、、、システムopen
コールのみが含まれているとします。write
close
link
あるプロセスはファイルを更新し、もう一方は定期的にファイルが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です。