Spec-Zone.ru › C++

std::setbuf

Определено в заголовке <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);
} // 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/w/cpp/io/c/setbuf

Spec-Zone.ru

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