Функция Назначает буфер для потока 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.
Смотрите также fflushfopensetbuf
Пример:
#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;
}