Namespaces
Variants

setbuf

С ru.cppreference.net
< c | io
 
 
Файловый ввод/вывод
Типы и объекты
        
Функции
Доступ к файлам
(C95)
Неформатированный ввод/вывод
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Форматированный ввод
Прямой ввод/вывод
Форматированный вывод
Позиционирование в файле
Обработка ошибок
Операции с файлами
 
Определено в заголовке <stdio.h>
void setbuf( FILE* stream, char* buffer );
(до C99)
void setbuf( FILE* restrict stream, char* restrict buffer );
(начиная с C99)
#define BUFSIZ  /* unspecified */

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

Если buffer не равен null, эквивалентно setvbuf(stream, buffer, _IOFBF, BUFSIZ).

Если buffer равен null, эквивалентно 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);
} // lifetime of buf ends, undefined behavior

Пример

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

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.21.5.5 Функция setbuf (стр.: TBD)
  • Стандарт 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

См. также

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