1

mtimeは、変更プロセスの開始時(ファイルを開いて書き込む)または変更プロセスの終了時(ファイルを閉じる)に更新されますか?

このリンクで何かを見つけました。

See man 2 stat for the semantics of mtime and ctime. In practice, the mtime and ctime will be updated in the in-memory copy of the inode and flushed out to disk asynchronously.

iノードは複数回フラッシュされる可能性があると思います。それが本当なら。変更プロセス中にmtimeが複数回更新される可能性があるということですか?

4

1 に答える 1

2

概念的には、すべての変更は特定の時点で発生します。はmtime、最新のそのようなイベントの時間です。

必要に応じて、ファイルへの大規模な書き込みを、それぞれが 1 バイト (または、必要に応じてビット!) の一連の個々の書き込みに分割されているかのように考えることができます。1 バイトの書き込みはそれぞれ瞬時に行われます。したがって、多くの時間がかかる大規模な書き込みの後、変更時間は、大規模な書き込みの最後の部分が実行された時刻、つまり大規模な書き込みの終了時刻を反映する必要があります。

これは通常の書き込み ( write()pwrite()、など...) です。ファイルが ( を使用して) メモリにマップされ、ファイル マッピングに関連付けられたメモリ アドレスの 1 つが更新さwritev()れたときに何が起こるかは明確ではありません。mmap()しかし、この場合、標準には答えがあります。Linux のmmap()マンページから: 「PROT_WRITE および MAP_SHARED でマップされたファイルの st_ctime および st_mtime フィールドは、マップされた領域への書き込みの後、MS_SYNC または MS_ASYNC フラグを使用した後続の msync(2) の前に更新されます。」

ちなみに、ファイルを開くことは、変更としてカウントされません (書き込みのためにファイルを開いた場合でも)。ファイルを閉じても、変更としてカウントされません。実際に書き込むだけです。

于 2013-03-03T14:11:48.900 に答える