18

ファイルをフラッシュする必要があるのはいつですか?
File.Close を呼び出して、自動的にフラッシュされると思うので、私は決してしませんね。

4

4 に答える 4

26

os.File には .Flush() がないことに気付くでしょう。バッファリングされていないため必要がないからです。それへの書き込みは、ファイルに書き込むための直接のシステムコールです。

プログラムが終了すると (クラッシュした場合でも)、開いているすべてのファイルはオペレーティング システムによって自動的に閉じられ、ファイル システムは変更をディスクに書き込みます (プログラムが終了してから数分後になる場合もあります)。 .

os.File.Sync() を呼び出すと、fsync() syscall が呼び出され、ファイル システムがそのバッファをディスクに強制的にフラッシュします。これにより、システムの電源が切られたり、オペレーティング システムがクラッシュしたりしても、データがディスク上に保持され、永続的であることが保証されます。

.Sync() を呼び出す必要はありません

于 2012-06-05T00:42:52.397 に答える
20

ここを参照してください。fsyncFile.Sync()へのシステムコールです。あなたはその名前でもっと見つけることができるはずです。

これはfflushfsyncと同じではなく、閉じる前に実行されないことに注意してください。

通常、呼び出す必要はありません。しばらくすると、この期間中に電源障害が発生しなければ、ファイルはディスクに書き込まれます。

于 2012-06-02T13:12:34.337 に答える
4

ここで最も推奨されるのは fsync() を呼び出さないことですが、一般的には主にアプリケーションの要件に依存します。重要なファイルの読み取り/書き込みに取り組んでいる場合は、常に fsync() を呼び出すことをお勧めします。

http://www.microhowto.info/howto/atomically_rewrite_the_content_of_a_file.html#idp31936

リンクには、いつ file.Sync() が役立つかについての詳細があります。

于 2018-01-29T21:13:47.520 に答える
0

できるだけデータの整合性を確保したい場合。たとえば、ファイルを閉じる前にプログラムがクラッシュした場合はどうなるでしょうか。

于 2012-06-02T12:40:47.973 に答える