setbuf
Управляет буферизацией потока. Эта функция не рекомендуется; вместо нее используйте функцию setvbuf
.
Синтаксис
void setbuf(
FILE *stream,
char *buffer
);
Параметры
stream
Указатель на структуру FILE
.
buffer
Выделенный пользователем буфер.
Замечания
Функция setbuf
управляет буферизацией для stream
. Аргумент stream
должен ссылаться на открытый файл, который не был прочитан или записан. buffer
Если аргумент имеет значениеNULL
, поток не является необученным. В противном случае буфер должен указывать на массив символов длиной BUFSIZ
, где BUFSIZ
— размер буфера, как определено в файле STDIO.H. Вместо буфера, по умолчанию выделенного системой для данного потока, для буферизации ввода-вывода используется указанный пользователем буфер. Поток stderr
не поддерживается по умолчанию, но можно использовать setbuf
для назначения буферов stderr
.
setbuf
заменено setvbuf
, что является предпочтительной подпрограммой для нового кода. В отличие от setvbuf
этого, setbuf
нет способа создания отчетов об ошибках. setvbuf
также позволяет управлять режимом буферизации и размером буфера. setbuf
существует для совместимости с существующим кодом.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
setbuf |
<stdio.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_setbuf.c
// compile with: /W3
// This program first opens files named DATA1 and
// DATA2. Then it uses setbuf to give DATA1 a user-assigned
// buffer and to change DATA2 so that it has no buffer.
#include <stdio.h>
int main( void )
{
char buf[BUFSIZ];
FILE *stream1, *stream2;
fopen_s( &stream1, "data1", "a" );
fopen_s( &stream2, "data2", "w" );
if( (stream1 != NULL) && (stream2 != NULL) )
{
// "stream1" uses user-assigned buffer:
setbuf( stream1, buf ); // C4996
// Note: setbuf is deprecated; consider using setvbuf instead
printf( "stream1 set to user-defined buffer at: %Fp\n", buf );
// "stream2" is unbuffered
setbuf( stream2, NULL ); // C4996
printf( "stream2 buffering disabled\n" );
_fcloseall();
}
}
stream1 set to user-defined buffer at: 0012FCDC
stream2 buffering disabled
См. также
Потоковый ввод-вывод
fclose
, _fcloseall
fflush
fopen
, _wfopen
setvbuf