Setvbuf
Функция setvbuf позволяет программе не только указать свой буфер, но и задать его размер:
int setvbuf (FILE *stream, char *buffer, int mode, size_t size);
Параметр stream должен указывать на открытый поток, причем для этого потока до вызова функции setvbuf нельзя выполнять операции чтения и записи.
Параметр buffer должен указывать на подготовленный программой буфер размером size байт. Этот буфер будет использоваться для работы с потоком stream.
Параметр mode может принимать значения _IOFBF , _IOLBF , _IONBF . Если mode равен _IOFBF или _IOLBF, параметр size указывает размер буфера. Если параметр mode равен _IONBF, буферизация не используется, а параметры buffer и size игнорируются.
Параметры _IOFBF и _IOLBF эквивалентны друг другу.
Если в качестве адреса буфера buffer задать значение NULL, функция автоматически закажет буфер размером size.
Функция setvbuf возвращает нуль при успешном завершении и ненулевую величину, если указан неправильный параметр mode или неправильный размер буфера size.
Для чего может понадобиться изменение размера буфера?
Главным образом - для сокращения времени, необходимого для позиционирования магнитных головок при выполнении операций одновременно над несколькими файлами, например, при копировании файлов, слиянии нескольких файлов в один и т. д.