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