Главная    Разработка ПО    функции языка Си

Описание функций языка Си

" S "

scalb,scalbf,scalbl 

scalbln,scalblnf,scalblnl 

scalbn,scalbnf,scalbnl 

setbuf 

setvbuf 

signbit 

sin,sinf,sinl 

sincos,sincosf,sincosl 

sinh,sinhf,sinhl 

sleep 

sqrt,sqrtf,sqrtl 

strcasestr 

strcat 

strchr 

strchrnul 

strcmp 

strcpy 

strcspn 

strdup 

strerror 

strftime 

strlen 

strncat 

strndup 

strncmp 

strncpy 

strpbrk 

strrchr 

strspn 

strstr 

strtod 

strtok 

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

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


Яндекс.Метрика

Рейтинг@Mail.ru