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