When to flush a file in Go?

泄露秘密 提交于 2019-12-21 07:24:44

问题


When is it necessary to flush a file?
I never do it because I call File.Close and I think that it is flushed automatically, isn't it?


回答1:


You'll notice that an os.File doesn't have a .Flush() because it doesn't need one because it isn't buffered. Writes to it are direct syscalls to write to the file.

When your program exits(even if it crashes) all files it has open will be closed automatically by the operating system and the file system will write your changes to disk when it gets around to it (sometimes up to few minutes after your program exits).

Calling os.File.Sync() will call the fsync() syscall which will force the file system to flush it's buffers to disk. This will guarantee that your data is on disk and persistent even if the system is powered down or the operating system crashes.

You don't need to call .Sync()




回答2:


See here. File.Sync() is syscall to fsync. You should be able to find more under that name.

Keep in mind that fsync is not the same as fflush and is not executed before close.

You generally don't need to call it. The file will be written to disk anyway, after some time and if there is no power failure during this period.




回答3:


Looks the most recommendations here are to not to call fsync(), but in general it mainly depends on your application requirement. If you are working on critical file read/write, its always recommended to call fsync().

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

link, has more details on when file.Sync() will help.




回答4:


When you want to ensure data integrity as much as possible. For example, what happens if your program crashes before it comes to closing the file?



来源:https://stackoverflow.com/questions/10862375/when-to-flush-a-file-in-go

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!