Функция setbuf

Прототип функции setbuf:

void setbuf( FILE * filestream, char * buffer );

Заголовочный файл

Название Язык
stdio.h С
cstdio С++

Описание

Устанавливает режим буферизации, который будет использоваться для операций ввода/вывода с заданным потоком. При полной буферизации потока, в качестве аргумента передается указатель на строку   буферизации. Если же, аргумент параметра buffer - NULL, буферизация для потока отключается, и данный поток становится небуферизованным.
Эта функция должна быть вызвана для файла, связанного с потоком, где-то между операциями открытия и закрытия файла.

Параметр buffer должен указывать на символьный массив, по крайней мере, размером bufsiz байт (BUFSIZ это константа, определенная в <cstdio>).

С полной буферизацией потоков, операций записи не предназначены быть написано непосредственно на устройстве, связанные с ними, данные накапливаются в буфере и записываются в устройство в качестве блока, когда он наполнен. Это письмо из всего блока не может быть принужден к промывке поток, который можно сделать по телефону fflush или закрытии файла (fclose). Все буферы и покраснел, когда программа завершает работу.

С небуферизованных потоков, данные записываются на физическое устройство как можно скорее после каждой операции записи.
Все файлы открываются с буфером, который выделен по умолчанию. Эта функция может быть использована для отключения буферизации или изменения размера буфера для конкретного потока.
Системные стандартные потоки, такие, как стандартный вывод и стандартный поток ошибок являются небуферизованными по умолчанию.
Чтобы изменить строку буферизации потока, используйте функцию setvbuf.

Параметры:

  • filestream
    Указатель на объект типа FILE, который соединён с открытым потоком.
  • buffer
    Выделенный пользователем буфер. Он должен иметь длину не менее BUFSIZ байт. BUFSIZ — макро-константа, определенная в <cstdio> специально разработана для указания длинны массива. Кроме того, указатель NULL  может быть задан для отключения буферизации.

Возвращаемое значение

нет

Пример: исходный код программы

//приме риспользования функции setbuf

#include <iostream>
#include <cstdio>

int main ()
{
  char buffer[BUFSIZ];
  FILE * ptrFile1 = fopen("file1.txt", "w"),
       * ptrFile2 = fopen("file2.txt", "a");

  setbuf( ptrFile1, buffer );                             // привязываем буфер к файлу
  fputs("Эта строка отправлена в файловый буфер", ptrFile1);
  fflush (ptrFile1);                                      // очистить буфер

  setbuf ( ptrFile2, NULL );                               // отключить буферизацию
  fputs ("Эта строка отправлена в небуферизованный поток", ptrFile2);

  fclose (ptrFile1);
  fclose (ptrFile2);

  return 0;
}

Пример работы программы

Открываются два файла с доступом записи. Поток, связанный с файлом file1.txt буферизован, выделенной символьной строкой buffer.
Второй буфер, связанный с файлом file2.txt, установлен как небуферизованный, поэтому вывод записывается на устройство как можно скорее.
Конечный результат, в обоих случаях одинаков, как с буфером так и без буферизации потока.

Автор: admin
Дата: 10.09.2012
Поделиться:

Комментарии

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

Вы должны войти, чтобы оставить комментарий.