Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по функциям С++.doc
Скачиваний:
168
Добавлен:
02.05.2014
Размер:
3.57 Mб
Скачать

Setvbuf

-----------------------------------------------------------------

НазначениеНазначает буферизацию потока

Синтаксис#include <stdio.h>

int setvbuf(FILE *stream, char *buf, int type,

size_t size);

Прототип в stdio.h

Замечанияsetvbuf вызывает буфер buf для буферизации вво-

да/вывода взамен автоматического размещения бу-

фера. Она используется после того как данный

поток будет открыт.

Если buf=0, то буфер будет размещен, используя

malloc. Размер size определяет размер буфера и

должен быть больше 0.

Примечание. Размер size ограничен по максималь-

ной величине - 32767.

stdin и stdout небуферизировынны если они не

определены, иначе они полностью буферезирован-

ны.

Unbuffered означает, что данные, записанные в

поток немедленно выводятся в файл или на уст-

ройство, в то время как buffered означает, что

данные накапливаются и записываются в виде бло-

ка.

Параметр type может быть одним из следующиx:

_IOFBF Файл полностью буферизирован. Когда бу-

фер пуст, следующий оператор ввода пыта-

ется заполнить буфер. При выводе буфер

полностью заполняется перед тем как дан-

ные записываются в файл.

_IOLBF Файл буферизирован построчно. Когда бу-

фер пуст, следуюий оператор ввода будет

пытаться наполнить пустой буфер до за-

полнения. При выводе, однако, будет на-

полняться до конца всякий раз, когда но-

вая строка данныx записывается в файл.

_IONBF Файл не буферизируется. Параметры buf и

size игнорируются. Каждый оператор ввода

будет читать непосредственно из файла, а

каждый оператор вывода будет немедленно

записывать данные в файл.

Частая причина ошибки состоит в размещении бу-

фера как автоматической (локальной) переменной

и тогда файл оказывается не в состоянии зак-

рыться перед возвратом из функции где был

объявлен буфер.

Возвращемое setvbuf возвращает 0 в случае успеxа и возвра-

значениещает отличное от 0 значение, если неправильно

были указаны type, size или если в системе не-

достаточно места для размещения буфера.

Переносимостьsetvbuf доступна для системы UNIX и совместима

со стандартом ANSI.

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

Пример

#include<stdio.h>

main()

{

FILE *input, *output;

char bufrl[512];

input = fopen("file.in","i");

output = fopen("file.out","w");

if (setvbuf(input, bufr _IOFBF 512) :=0)

printf("failed to set up buffer for input file\n");

else

printf("buffer set up for input file\n");

if (setvbuf(output, NULL, _IOLBF, 132 != 0)

printf("failedto set up buffer for output line\n");

else

printf("buffer to set up for output file\n");

fclose(input);

fclose(utput);

}

-----------------------------------------------------------------