Когда нужно очистить файл в Go?

Когда нужно сделать flushing в файл?
Я никогда не делаю этого, потому что я звоню в File.Close, и я думаю, что он сбрасывается автоматически, не так ли?

Ответ 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

Если вы хотите как можно больше обеспечить целостность данных. Например, что произойдет, если ваша программа выйдет из строя, прежде чем приступить к закрытию файла?