CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
setvbuf
setvbuf
Функция Назначает буфер для потока stream.
Синтаксис #include <stdio.h>
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 <stdio.h>
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;
}
