Нет. fclose () не подразумевает fsync (). Многие файловые системы Linux задерживают запись и группируют их, что повышает общую производительность, предположительно снижает износ дисковода и увеличивает время автономной работы ноутбуков. Если бы ОС закрывала запись при закрытии файла, многие из этих преимуществ были бы потеряны.
Пол Томблин упомянул в своем ответе противоречие, и объяснение того, что я видел, не вписывается в комментарий. Вот что я слышал:
Недавние разногласия касаются порядка ext4 (ext4 - предполагаемый преемник популярной файловой системы ext3 Linux). В системах Linux и Unix принято менять важные файлы, читая старый, записывая новый с другим именем и переименовывая новый в старый. Идея состоит в том, чтобы обеспечить наличие нового или старого, даже если в какой-то момент система выйдет из строя. К сожалению, ext4, похоже, рад прочитать старый, переименовать новый в старый и написать новый, что может стать реальной проблемой, если система выйдет из строя между шагами 2 и 3.
Стандартный способ справиться с этим, конечно, fsync (), но он снижает производительность. Реальное решение состоит в том, чтобы модифицировать ext4, чтобы сохранить порядок ext3, при котором он не будет переименовывать файл, пока не закончит его запись. Очевидно, что это не охватывается стандартом, так что это проблема качества реализации, и QoI в ext4 здесь действительно паршивый, потому что невозможно надежно написать новую версию файлов конфигурации без постоянного вызова fsync () со всеми проблемами что вызывает или рискует потерять обе версии.