何时在Go中刷新文件?

时间:2012-06-02 12:37:14

标签: go synchronization flush

何时需要flush文件?
我从来没有这样做,因为我称之为File.Close并且我认为它是自动刷新的,不是吗?

4 个答案:

答案 0 :(得分:14)

你会注意到os.File没有.Flush(),因为它不需要缓存,因为它没有缓冲。写入它是直接系统调用来写入文件。

当您的程序退出时(即使它崩溃),它打开的所有文件都将由操作系统自动关闭,文件系统会在您更改磁盘时将其写入磁盘(有时在您的磁盘后几分钟内)程序退出)。

调用os.File.Sync()将调用fsync()系统调用,这将强制文件系统将其缓冲区刷新到磁盘。即使系统断电或操作系统崩溃,这也可以保证您的数据在磁盘上并且是持久的。

您无需调用.Sync()

答案 1 :(得分:12)

hereFile.Sync()是系统调用fsync。你应该能够在这个名字下找到更多。

请注意,fsyncfflush不同,并且在关闭前不会执行。

您通常不需要打电话。无论如何,在一段时间之后,如果在此期间没有电源故障,该文件将被写入磁盘。

答案 2 :(得分:2)

看起来这里的大多数建议是不要调用fsync(),但一般来说它主要取决于你的应用程序要求。如果您正在处理关键文件读/写,则始终建议调用fsync()。

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

链接,有关file.Sync()何时有用的详细信息。

答案 3 :(得分:0)

当您想要尽可能确保数据完整性时。例如,如果程序在关闭文件之前崩溃会发生什么?