Стандарт C определяет 3 типа буферизации для выходных потоков:
- Небуферизованный → буферизация не выполнена
- Строковый буфер → буфер до появления новой строки
- Полностью буферизованный → буфер до размера буфера
Тип буферизации выходного потока можно изменить с помощью функций setvbuf(3)
и setbuf(3)
.
Стандарт C требует, чтобы stderr
не был полностью буферизован при запуске (он обычно не буферизуется во многих реализациях, чтобы увидеть ошибки как можно скорее); и stdout
быть полностью буферизованным, только если можно определить, что он не ссылается на терминал (когда он ссылается на терминал, многие реализации инициализируют его как буферизованный строкой, что вы и видите).