Функция fgets()
является частью пакета stdio, и поэтому она должна буферизовать (или нет) входной поток способом, который согласуется также с использованием fgetc()
, fscanf()
, fread()
и т. Д. вперед. Это означает, что сам буфер (если поток буферизован) является свойством объекта FILE
.
Имеется ли буфер или нет, и, если он буферизован, размер буфера можно подсказать библиотеке, вызвав setvbuf()
.
Реализация библиотеки имеет достаточное количество широты, чтобы игнорировать подсказки и делать то, что она думает лучше всего, но обычно принимаются буферы, которые имеют «разумные» степени двух. Вы заметили, что по умолчанию было 4096, что явно меньше оптимального.
Поток буферизируется по умолчанию, если он открыт в реальном файле. Его буферизация на канале, FIFO, TTY или чем-то еще может иметь другие значения по умолчанию.