Spec-Zone.ru › C++

std::setbuf

Определён в заголовочном файле <cstdio>
void setbuf( std::FILE* stream, char* buffer );

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

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

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

Параметры

stream - файловый поток, для которого устанавливается буфер
buffer - указатель на буфер, используемый потоком. Если передан нулевой указатель, буферизация отключается. Если указатель не равен null, диапазон [buffer, 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);
} // lifetime of buf ends, undefined behavior

Пример

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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/c/setbuf

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API