Буферизация - способ организации ввода-вывода в программе, позволяющий минимизировать число обращений к устройству.
При чтении из дискового файла, блок данных копируется с диска в пользовательский буфер. Многими операционными системами используется также промежуточный "системный буфер". Этот блок данных, называемый также физическим блоком или блоком ввода-вывода, имеет объем, заданный поименованной константой BUFSIZ, определенной в файле заголовков stdio.h. Операции чтения из файла фактически читают данные из этого буфера. При исчерпании буфера вновь выполняется чтение с диска, и буфер пополняется. Обращение к диску лишь при необходимости обеспечивает существенную экономию времени. Программисты могут читать из файла множеством способов (посимвольно, построчно и т.д.) и не задумываться о минимизации количества обращений к диску. Стандартный пакет ввода-вывода гарантирует решение этой проблемы.
В области данных выполняющейся программы содержится множество структур FILE - по одной для каждого файла. Первые три структуры зарезервированы для потоков stdin, stdout и stderr. Следующая структура обычно используется для первого файла, открытого функцией fopen(). Одно из полей структуры FILE указывает на связанный с файлом пользовательский буфер. Еще одно поле указывает позицию буфера, с которой будет работать следующая операция чтения или записи. Остальные поля содержат информацию о том, как открывался файл (r, w, a, r+, w+, a+), был достигнут ли конец файла и т.д.
Рис. 1.  Буферизованный ввод-вывод