setbuf – установка буферизации для записи в поток данных.
Синтаксис:
#include < stdio.h >
void setbuf (FILE *stream, char *buf);
Аргументы:
stream – указатель на управляющую таблицу потока данных.
buf – указатель на массив для буферизации
Возвращаемое значение:
Нет возвращаемых значений.
Описание:
Функция setbuf устанавливает для файла буфер, в который данные будут сохраняться перед записью в файл. Эта функция может использоваться после привязки к потоку данных файла (например, с помощью функции fopen), но до каких либо операций с открытым файлом.
Если аргумент buf NULL, то данные сразу же будут записываться в файл, иначе данные будут накапливаться в буфере, до его полного заполнения, и только потом будут сброшены в файл.
Внимание! Размер буфера должен соответствовать значению, определенному в константе BUFSIZ. Обычно это 8192 байт. Использование буфера меньшего размера может привести к критическим ошибкам в работе вашего программного обеспечения.
По сути, вызов этой функции аналогичен (кроме сброса индикатора ошибок) вызову функции fseek со следующими аргументами:
setvbuf (stream, buf, _IOFBF, BUFSIZ);
где,
stream - указатель на управляющую таблицу потока данных,
buf – указатель на массив для буферизации,
_IOFBF – способ буферизации (полная буферизация),
BUFSIZ – размер массива буферизации.
Пример:
В примере открывается файл для записи и устанавливается буферизация. В файл пишется десять символов, по одному символу. Символы в начале накапливаются в буфере (буферизуются), что позволяет сэкономить время на записи в файл. Так как размер буфера BUFSIZ значительно больше объема записываемых данных, то из буфера в файл данные будут записаны только после закрытия файла, штатного завершения работы программы или после вызова функции fflush. В примере данные будут записаны в файл после его закрытия (fclose).
#include < stdio.h > // Для printf, fopen, fclose, setbuf, putc
int main (void)
{
// Переменная, в которую будет сохранен указатель
// на управляющую таблицу открываемого потока данных
FILE *mf;
// Массив для буферизации данных
char str [BUFSIZ]=””;
printf (“Открытие файла: ”);
// Открытие файла
mf=fopen (“myfile/test.txt”,”w”);
// Проверка открытия файла
if (mf == NULL) printf (“ошибка\n”);
else printf (“выполнено\n”);
// Установка буферизации
setbuf (mf,str);
// Запись в файл 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
|