Прототип функции 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
, установлен как небуферизованный, поэтому вывод записывается на устройство как можно скорее.
Конечный результат, в обоих случаях одинаков, как с буфером так и без буферизации потока.
Комментарии