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

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

" 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

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


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

Рейтинг@Mail.ru