Namespaces
Variants

std:: setbuf

From cppreference.net
< cpp ‎ | io ‎ | c
Определено в заголовочном файле <cstdio>
void setbuf ( std:: FILE * stream, char * buffer ) ;

Устанавливает внутренний буфер для операций ввода-вывода, выполняемых с C потоком stream .

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

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

Содержание

Параметры

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

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

(нет)

Примечания

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

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

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

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

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

Пример

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

#include <chrono>
#include <cstdio>
#include <thread>
int main()
{
    using namespace std::chrono_literals;
    std::setbuf(stdout, nullptr); // unbuffered stdout
    std::putchar('a'); // appears immediately on unbuffered stream
    std::this_thread::sleep_for(1s);
    std::putchar('b');
}

Вывод:

ab

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

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