当刷新在Go文件?(When to flush a file in Go?)

2019-07-29 17:30发布

什么时候需要刷新文件?
我从来没有这样做,因为我叫File.Close,我认为它会自动刷新,是不是?

Answer 1:

你会发现,一个os.File没有.Flush(),因为它并不需要一个,因为它没有缓冲。 写它是直接的系统调用来写入文件。

当你的程序退出(即使它崩溃),它具有开放将操作系统和文件系统将自动关闭,当它(在程序退出后,有时长达数分钟)得到周围将会写入更改磁盘的所有文件。

调用os.File.Sync()将调用FSYNC()系统调用,将强制文件系统来刷新它的缓冲区写入磁盘。 这将保证您的数据在磁盘上的和持久的,即使系统断电或操作系统崩溃。

你并不需要调用.SYNC()



Answer 2:

见这里 。 File.Sync()是系统调用到FSYNC 。 你应该能够找到下这个名字了。

请记住, fsync是不一样的fflush之前关闭不执行。

你一般不需要调用它。 该文件将被写入磁盘,无论如何,一段时间后,如果有在此期间没有停电。



Answer 3:

看起来这里的大多数建议是不叫的fsync(),但一般它主要取决于你的应用需求。 如果您正在使用的关键文件的读/写,它总是建议致电FSYNC()。

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

链接,对当file.Sync()将帮助更多的细节。



Answer 4:

当你想确保数据的完整性尽可能地。 例如,如果你的程序崩溃谈到关闭文件之前会发生什么?



文章来源: When to flush a file in Go?