Существует несколько мест, где существует буферизация данных для повышения эффективности при использовании fwrite()
: буферизация в среде выполнения C ++ и буферизация в интерфейсе файловой системы операционной системы и буферизация в реальном оборудовании диска.
По умолчанию они задерживают фактическую физическую запись данных на диск до тех пор, пока не появится фактический запрос на очистку буферов или не будут включены соответствующие индикаторы для выполнения физической записи при выполнении запросов на запись.
Если вы хотите изменить поведение fwrite()
, взгляните на setbuf()
функцию перенаправление setbuf , а также setbuff()
справочную страницу Linux и вот Документация Microsoft по setbuf()
.
И если вы посмотрите на документацию по базовой Windows CreateFile()
функции , вы увидите, что есть несколько флагов, которые включают флаги какнужно ли делать буферизацию данных.
FILE_FLAG_NO_BUFFERING 0x20000000
Файл или устройство открываются без системного кэширования для чтения и записи данных.Этот флаг не влияет на кэширование жесткого диска или файлы, отображаемые в память.
Существуют строгие требования для успешной работы с файлами, открытыми с помощью CreateFile с использованием флага FILE_FLAG_NO_BUFFERING, подробности см. В разделе Буферизация файлов.
И посмотрите раздел документации Microsoft. Буферизация файлов .
В простом примере приложение откроет файл для доступа на запись с флагом FILE_FLAG_NO_BUFFERING
, а затем выполнит вызов.к функции WriteFile
, используя буфер данных, определенный в приложении.В этих обстоятельствах этот локальный буфер является фактически единственным файловым буфером, который существует для этой операции.Из-за структуры физического диска, структуры хранилища файловой системы и отслеживания положения указателя файла на уровне системы эта операция записи завершится ошибкой, если локально определенные буферы данных не соответствуют определенным критериям выравнивания, обсуждаемым в следующем разделе.
Посмотрите на это обсуждение настроек на уровне ОС для того, что выглядит как Linux https://superuser.com/questions/479379/how-long-can-file-system-writes-be-cached-with-ext4