Namespaces
Variants

setbuf

From cppreference.net
< c ‎ | io
Определено в заголовочном файле <stdio.h>
void setbuf ( FILE * stream, char * buffer ) ;
(до C99)
void setbuf ( FILE * restrict stream, char * restrict buffer ) ;
(начиная с C99)
#define BUFSIZ     /*unspecified*/

Устанавливает внутренний буфер для использования в операциях потока. Он должен быть длиной не менее BUFSIZ символов.

Если buffer не является нулевым указателем, эквивалентно setvbuf ( stream, buffer, _IOFBF , BUFSIZ ) .

Если buffer является нулевым указателем, эквивалентно вызову setvbuf ( stream, NULL , _IONBF , 0 ) , что отключает буферизацию.

Содержание

Параметры

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

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

Нет.

Примечания

Если BUFSIZ не является подходящим размером буфера, setvbuf может быть использована для его изменения.

setvbuf также следует использовать для обнаружения ошибок, поскольку setbuf не указывает на успех или неудачу.

Эта функция может использоваться только после того, как stream был ассоциирован с открытым файлом, но до любой другой операции (кроме неудачного вызова setbuf / setvbuf ).

Распространённая ошибка — установка буфера stdin или stdout на массив, время жизни которого заканчивается до завершения программы:

int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // время жизни buf завершается, неопределенное поведение

Пример

setbuf может использоваться для отключения буферизации потоков, требующих немедленного вывода.

#include <stdio.h>
#include <threads.h>
int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    putchar('b'); 
}

Вывод:

ab

Ссылки

  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.21.5.5 Функция setbuf (стр: 225)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.21.5.5 Функция setbuf (стр. 307-308)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.19.5.5 Функция setbuf (стр: 273)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.9.5.5 Функция setbuf

Смотрите также

устанавливает буфер и его размер для файлового потока
(функция)
C++ documentation для setbuf