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
См. также
| устанавливает буфер и его размер для потока файла (функция) |
|
C документация для setbuf |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/c/setbuf