|
1
97
在继续之前,只要想确保输出已写入,就需要无缓冲输出。一个例子是C运行时库下的标准错误——这通常在默认情况下是不缓冲的。由于错误(希望)很少发生,所以您希望立即了解它们。另一方面,标准输出 是 缓冲只是因为它假设会有更多的数据通过它。 另一个例子是日志库。如果日志消息保存在进程的缓冲区中,并且进程转储核心,那么很可能永远不会写入输出。 此外,它不仅最小化了系统调用,而且还最小化了磁盘I/O。假设一个程序一次读取一个字节的文件。对于未缓冲的输入,您将针对每个字节输出(相对非常慢)磁盘,即使它可能必须读取整个块(磁盘硬件本身可能有缓冲区,但您仍将输出到磁盘控制器,这将比内存访问慢)。 通过缓冲,整个块立即被读入缓冲区,然后单个字节从缓冲区(内存中,速度极快)传递给您。 请记住,缓冲可以采取多种形式,例如在以下示例中:
|
|
|
2
25
当您已经准备好写入磁盘的大量字节序列时,您需要无缓冲的输出,并且希望 避免额外复制 进入中间的第二个缓冲区。
缓冲的输出流将把写入结果累积到中间缓冲区中,只有在积累了足够的数据(或
无缓冲输出具有
没有什么
确保数据到达磁盘;该功能由
|