是否需要为C/C++中的文件I/O操作创建自己的缓冲区

Is there any need to create my own buffer for file I/O operations in C/C++?

本文关键字:操作 创建 缓冲区 自己的 文件 是否 C++      更新时间:2023-10-16

是否需要使用自定义缓冲区来读取或写入C或C++中的文件以减少文件I/O?

例如,如果您需要逐个条目读取文件(一次一个字符,或者一次一种结构),是否建议使用缓冲区减少对fread()的调用次数?它在I/O(读写)方面有什么不同吗?答案是否取决于操作系统或代码中没有的其他内容?

我知道这是推荐的,但今天有人告诉我stdio.h上的setvbuf(),似乎一切都已经准备好了,您不需要将这种复杂性添加到您的程序中。

查看stackoverflow,我发现了一个没有投票的答案,声称使用fgetc/setvbuf()fgets之间没有显著差异。真的是这样吗?

fread()函数已经实现了缓冲,以避免频繁调用较低级别的read()。除非您做了一些基准测试并发现文件I/O占用了大量时间,否则您不应该担心它。

<stdio.h>中的函数都有自己的缓冲。有例外,但一般来说,我希望它们能针对他们运行的系统,例如缓冲区大小。其中在这种情况下,我认为使用setvbuf()除了一些非常特殊的情况。

std::istream对象要求与其关联的std::streambuf对象实际执行读取操作。

istream文件(ifstream)的实现在内部有一个fstreambuf,它就是这样做的。