setvbuf – установка буферизации для записи в поток данных.
Синтаксис:
#include < stdio.h >
int setvbuf (FILE *stream, char *buf, int mode, size_t size);
Аргументы:
stream – указатель на управляющую таблицу потока данных.
buf – указатель на массив для буферизации.
mode – режим буферизации.
size – размер буфера.
Возвращаемое значение:
0 – при успешном завершении работы функции.
Отличное от нуля значение, если при работе функции возникли ошибки.
Описание:
Функция setvbuf устанавливает для файла буфер, в который данные будут сохраняться перед записью в файл. Эта функция может использоваться после привязки к потоку данных файла (например, с помощью функции fopen), но до каких либо операций с открытым файлом.
Если аргумент buf NULL, то буфер размером, указанным в аргументе size, будет создан автоматически при работе функции setvbuf с помощью функции malloc.
Аргумент mode задает способ буферизации и может принимать следующие значения:
_IOFBF - полная буферизация, то есть данные будут буферизироваться, пока буфер не заполниться полностью и только затем будут записаны в файл.
_IOLBF -построчная буферизация, то есть данные будут буферизироваться пока не встретиться символ «конец строки» или пока буфер не заполниться полностью и только затем будут записаны в файл.
_IONBF - отсутствие буферизации, то есть данные будут сразу записываться в файл.
Пример:
В примере открывается файл для записи и устанавливается буферизация (размер буфера 1024 байта, режим буферизации - полный). В файл пишется десять символов, по одному символу. Символы в начале накапливаются в буфере (буферизуются), что позволяет сэкономить время на записи в файл. Так как размер буфера значительно больше объема записываемых данных, то из буфера в файл данные будут записаны только после закрытия файла, штатного завершения работы программы или после вызова функции fflush. В примере данные будут записаны в файл после его закрытия (fclose).
#include < stdio.h > // Для printf, fopen, fclose, setvbuf, putc
int main (void)
{
// Переменная, в которую будет сохранен указатель
// на управляющую таблицу открываемого потока данных
FILE *mf;
// Массив для буферизации данных
char str [1024]=””;
printf (“Открытие файла: ”);
// Открытие файла
mf=fopen (“myfile/test.txt”,”w”);
// Проверка открытия файла
if (mf == NULL) printf (“ошибка\n”);
else printf (“выполнено\n”);
// Установка буферизации
setvbuf (mf,str,_IOFBF, 1024);
// Запись в файл 10 символов поочередно, по одному символу.
// Данные в файл записаны не будут, а накопятся в буфере str
for (int i=0; i < 10, i++)
putc (‘1’,mf);
// Вывод содержимого буфера str на консоль
printf (“str: %s\n”,str)
// Закрытие файла. После закрытия файла содержимое буфера
// str будет записано в файл.
printf (“Закрытие файла: ”);
if ( fclose (mf) = EOF) printf (“ошибка\n”);
else printf (“выполнено\n”);
return 0;
}
| |
Результат:
Открытие файла: выполнено
str: 1111111111
Закрытие файла: выполнено
|
Смотри так же:
setbuf
setbuffer
setlinebuf
setvbuf
fflush
|