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; }