fwrite缓冲输出吗?

mic*_*ael 13 c++

在C++中,有一个std::fwrite()将缓冲区写入磁盘上的文件.

如果fwrite实现中有任何缓冲区,你能告诉我吗?

即如果我多次调用fwrite()(比如说10次),它实际上是否会调用10次不同的文件I/O?

我问Ubuntu 10.04环境.

Pot*_*ter 12

是的,它是缓冲的.缓冲区的大小由BUFSIZ.(谢谢@ladenedge.)十个足够大的操作将导致十次系统调用.

您也可以使用std::setbuf和设置自己的缓冲区std::setvbuf.

函数in cstdio继承自C语言.C++中的首选接口是fstreamfilebuf.

  • 我认为默认的缓冲区大小是`BUFSIZ`,如stdio.h中所定义的那样,当然调用者当然不需要这些信息.`setbuf`可用于控制某些系统的大小. (3认同)

Mac*_*Mac 7

这取决于.在大多数平台上,文件IO被缓存,因此fflush()存在将缓存数据写入磁盘的调用 - 在这方面,您的第一个问题的答案是(通常)"是",而您的第二个问题是"否".也就是说,任何特定平台的任何想象力都无法保证这一点 - 通常,标准只规定了这些功能的接口,而不是它们的实现.此外,fwrite()如果缓存变为"满",调用很可能会导致隐式刷新,在这种情况下,调用fwrite()实际上可能触发文件IO - 尤其是在调用fwrite()大量数据时.