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); } // время жизни 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
Смотрите также
|
задает буфер и его размер для файлового потока
(функция) |
|
|
Документация C
для
setbuf
|
|