Когда нужно сделать flushing в файл?
Я никогда не делаю этого, потому что я звоню в File.Close, и я думаю, что он сбрасывается автоматически, не так ли?
Когда нужно очистить файл в Go?
Ответ 1
Вы заметите, что os.File не имеет .Flush(), потому что он не нужен, потому что он не буферизирован. Пишет к нему прямые системные вызовы для записи в файл.
Когда ваша программа выйдет (даже если она выйдет из строя), все открытые ею файлы будут автоматически закрыты операционной системой, и файловая система будет записывать ваши изменения на диск, когда она приближается к ней (иногда до нескольких минут после вашего выходы программы).
Вызов os.File.Sync() вызовет сценарий fsync(), который заставит файловую систему сбросить его на диск. Это гарантирует, что ваши данные будут на диске и постоянны, даже если система выключена или сбой операционной системы.
Вам не нужно вызывать .Sync()
Ответ 2
Смотрите здесь. File.Sync()
- это syscall для fsync. Вы должны найти больше под этим именем.
Имейте в виду, что fsync
не совпадает с fflush и не выполняется перед закрытием.
Обычно вам не нужно его вызывать. Файл будет записан на диск в любом случае через некоторое время, и если в этот период не произойдет сбой питания.
Ответ 3
Здесь вы найдете рекомендации не для вызова функции fsync(), но в основном это зависит от вашего требования к приложениям. Если вы работаете с критическим чтением/записью файла, всегда рекомендуется вызывать fsync().
http://www.microhowto.info/howto/atomically_rewrite_the_content_of_a_file.html#idp31936
имеет более подробную информацию о том, когда help.Sync().
Ответ 4
Если вы хотите как можно больше обеспечить целостность данных. Например, что произойдет, если ваша программа выйдет из строя, прежде чем приступить к закрытию файла?