Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

setvbuf

setvbuf


Функция            Назначает буфер для потока stream.

Синтаксис          #include <stdio.h>
                   void setvbuf(FILE *stream, char *buf, int type,
                                                       size_t size);

Файл, содержащий   stdio.h
прототип

Описание           Функция setvbuf    выделяет    буфер    buf    для
                   использования  в  операциях  ввода/вывода - вместо
                   автоматически выделяемого буфера.  Они  вызываются
                   только  после того,  как данный поток stream будет
                   открыт.

                   При вызове  функции  setvbuf,  если параметр buf =
                   NULL,  буфер  будет  выделен  посредством  malloc;
                   параметр  size  будет  определять объем выделенной
                   памяти.  Параметр size определяет размер буфера  и
                   должен быть больше нуля.

                   Замечание. Параметр   size   не  должен  превышать
                   32767.

                   Стандартный ввод  и  вывод  stdin  и   stdout   не
                   используют    буферов,    если    они    не   были
                   переназначены;  в противном случае,  ввод и  вывод
                   производиться с      буферизацией.      unbuffered
                   (небуферизованный   ввод/вывод)   означает,    что
                   символы,    записываемые    в   поток,   поступают
                   непосредственно в файл или  на  устройство;  в  то
                   время  как  buffered  (буферизованный  ввод/вывод)
                   означает,  что  символы  накапливаются   и   затем
                   записываются, как блок.

                   Параметр type имеет одно из следующих значений:

                   _IOFBF Файл  использует  буферы  полностью  (fully
                          buffered).  Если  буфер   пуст,   следующая
                          операция  ввода  пытается  заполнить буфер.
                          Перед тем,  как данные записываются в файл,
                          выводной     буфер     должен     полностью
                          заполниться.

                   _IOLBF Файл  использует  буферы  построчно   (line
                          buffered).   Когда  буфер  пуст,  следующая
                          операция ввода пытается его заполнить.  Тем
                          не  менее,  при выводе буфер будет сброшен,
                          как только  в  файл  будет  записан  символ
                          перехода на новую строку.

                   _IONBF Файл  не  использует  буферов (unbuffered).
                          Параметры buf и size  игнорируются.  Каждая
                          операция   ввода   будет  считывать  данные
                          непосредственно из файла, и каждая операция
                          вывода      будет     записывать     данные
                          непосредственно в файл.

                   Наиболее распространенной причиной ошибки является
                   размещение    буфера,    в    качестве   automatiс
                   (локальной) переменной  и  затем  попытка  закрыть
                   файл до выхода из функции,  в которой был объявлен
                   буфер.

Возвращаемое       Функция setvbuf при успешном завершении возвращает
значение           0. Не нуль она возвращает, если параметры type или
                   size имеют  неверные  значения;   или   если   для
                   размещения буфера нехватает памяти.

Переносимость      Функция поддерживаются на системах UNIX и стан-
                   дартом ANSI C.

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

Пример:

#include <stdio.h>

int main(void)
{
   FILE *input, *output;
   char bufr[512];
   input = fopen("file.in", "r");
   output = fopen("file.out", "w");
   /* указать минимальный доступ к диску и свой буфер */
   if (setvbuf(input, bufp,_IOLBF, 512) != 0)
       printf("Ошибка, при определении буфера для входного файла\n");
   else
       printf("Буфер определен\n");
   /*  определить для входного файла строчную буферизацию, и неявно
       определить буфер, который будет выделен, с помощью вызова
       функции malloc */
   if (setvbuf(output, NULL,_IOLBF, 132) != 0)
       printf("Ошибка, при определении буфера для выходного файла\n");
   else
       printf("Буфер определен\n");
   /* ввод вывод */
   /* закрыть файлы */
   fclose(input);
   fclose(output);
   return 0;
}

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог