std:: setbuf
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Определено в заголовочном файле
<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
|
|