Поделиться через


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