std::setbuf
来自 cppreference.cn
| 定义于头文件 <cstdio> |
||
| void setbuf( std::FILE* stream, char* buffer ); |
||
为 C 流 stream 上执行的 I/O 操作设置内部缓冲区。
若 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
| |