setvbuf

Функция            Назначает буфер для потока stream.

Синтаксис          #include 
                   void setvbuf(FILE *stream, char *buf, int type,
                                                       size_t size);

Файл, содержащий   stdio.h
прототип

Описание           Функция setvbuf выделяет буфер buf для использова-
                   ния в операциях ввода/вывода - вместо автомати-
                   чески выделяемого буфера. Они вызываются только
                   после того, как данный поток stream будет открыт.

                   При вызове функции setvbuf, если параметр buf =
                   NULL, буфер будет выделен посредством malloc; па-
                   раметр size будет определять объем выделенной па-
                   мяти. Параметр size определяет размер буфера и
                   должен быть больше нуля.

                   Замечание. Параметр size не должен превышать
                   32767.

                   Стандартный ввод и вывод stdin и stdout не ис-
                   пользуют буферов, если они не были переназначены;
                   в противном случае, ввод и вывод производиться с
                   буферизацией.

                   unbuffered (небуферизованный ввод/вывод) означа-
                   ет, что символы, записываемые в поток, поступают
                   непосредственно в файл или на устройство; в то
                   время как buffered (буферизованный ввод/вывод)
                   означает, что символы накапливаются и затем запи-
                   сываются, как блок.

                   Параметр type имеет одно из следующих значений:

                   _IOFBF Файл использует буферы полностью (fully
                   buffered). Если буфер пуст, следующая операция
                   ввода пытается заполнить буфер. Перед тем, как
                   данные  записываются  в файл, выводной буфер дол-
                   жен полностью заполниться.

                   _IOLBF Файл использует буферы построчно (line
                   buffered). Когда буфер пуст, следующая операция
                   ввода пытается его заполнить. Тем не менее, при
                   выводе буфер будет сброшен, как только в файл бу-
                   дет записан символ перехода на новую строку.

                   _IONBF Файл не использует буферов (unbuffered).
                   Параметры buf и size игнорируются. Каждая операция
                   ввода будет считывать данные непосредственно из
                   файла, и каждая операция вывода будет записывать
                   данные непосредственно в файл.

                   Наиболее распространенной причиной ошибки являет-
                   ся размещение буфера, в качестве automatiс (ло-
                   кальной) переменной и затем попытка закрыть файл
                   до выхода из функции, в которой был объявлен бу-
                   фер.

Возвращаемое       Функция setvbuf при успешном завершении возвращает
значение           0. Не нуль она возвращает, если параметры type или
                   size имеют неверные значения; или если для разме-
                   щения буфера нехватает памяти.

Переносимость      Функция поддерживаются на системах UNIX и стан-
                   дартом ANSI C.

Смотрите также      fflush fopen setbuf

Пример:

#include 

int main(void)
{
   FILE *input, *output;
   char bufr[512];
   input = fopen("file.in", "r");
   output = fopen("file.out", "w");
   /* указать минимальный доступ к диску и свой буфер */
   if (setvbuf(input, bufp,_IOLBF, 512) != 0)
       printf("Ошибка, при определении буфера для входного файла\n");
   else
       printf("Буфер определен\n");
   /*  определить для входного файла строчную буферизацию, и неявно
       определить буфер, который будет выделен, с помощью вызова
       функции malloc */
   if (setvbuf(output, NULL,_IOLBF, 132) != 0)
       printf("Ошибка, при определении буфера для выходного файла\n");
   else
       printf("Буфер определен\n");
   /* ввод вывод */
   /* закрыть файлы */
   fclose(input);
   fclose(output);
   return 0;
}