std::setbuf
来自cppreference.com
在标头 <cstdio> 定义
|
||
void setbuf( std::FILE* stream, char* buffer ); |
||
为 C 流 stream 上进行的 I/O 操作设置内部缓冲区。
若 buffer 非空,则等价于 std::setvbuf(stream, buffer, _IOFBF, BUFSIZ)。
若 buffer 为空,则等价于 std::setvbuf(stream, NULL, _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); // 无缓冲的 stdout std::putchar('a'); // 在无缓冲的流上立即显现 std::this_thread::sleep_for(1s); std::putchar('b'); }
输出:
ab
参阅
为文件流设置缓冲区与其大小 (函数) |