setvbuf

Forums:

http://glagolew2010.narod.ru/13/setvbuf.htm

#include stdio.h>
int setvbuf(FILE *stream, char *buf, int mode, size_t size);

Функция setvbuf() позволяет программисту задать буфер, его размер и режим работы с указанным потоком. Массив символов, адресуемый параметром buf, используется в качестве буфера потока для операций ввода/вывода. Размер буфера устанавливается с помощью параметра size, а режим mode определяет, как будет выполняться буферизация. Если параметр buf равен нулю, функция setvbuf() выделяет собственный буфер.

В версии C99 к параметрам stream и buf применен квалификатор restrict.

Возможными значениями параметра mode являются =

  • _IOFBF
  • _IONBF
  • _IOLBF

которые определены в заголовочном файле .
Причём:

  1. Если параметр mode равен _IOFBF, для буферизации используется полный объем буфера.
  2. Если mode равен _IOLBF, поток будет буферизирован построчно, т.е. содержимое буфера будет дозаписываться в поток при каждой записи в поток вывода символа новой строки. Содержимое буфера также дозаписывается в поток при заполнении буфера. При чтении из входного потока появление разделителя строк приведет к прекращению подкачки в буфер.
  3. Если установлен режим _IONBF, поток не буферизируется.

Функция setvbuf() возвращает нуль при успешном выполнении, а в противном случае ненулевое значение.

Пример

Данный фрагмент программы устанавливает построчный режим вывода потока fp в буфер размером 128 символов.

#include stdio.h>
char buffer[128];
.
.
.
setbuf(fp, buffer);