在 C 中,我可以轻松地将流设置为无缓冲 I/O:
FILE * f = fopen( "test", "r" );
setvbuf( f, (char *)NULL, _IONBF, 0 );
如何使用 C++ IOStreams 实现类似的无缓冲 I/O?
对于文件流,您可以使用pubsetbuf
:
std::ifstream f;
f.rdbuf()->pubsetbuf(0, 0);
f.open("test");
C++ 标准对文件流setbuf
(以及因此)的影响说明了以下内容:pubsetbuf
如果
setbuf(0,0)
在该流上发生任何 I/O 之前对该流调用,则该流将变为无缓冲。否则结果是实现定义的。“无缓冲”意味着 总是返回 nullpbase()
并且pptr()
输出到文件应该尽快出现。
第一句保证上面的代码使流无缓冲。请注意,某些编译器(例如 gcc)将打开文件视为对流的 I/O 操作,因此pubsetbuf
应在打开文件之前调用(如上)。
然而,最后一句话似乎暗示这仅用于输出,而不用于输入。我不确定这是否是疏忽,或者是否有意。查阅您的编译器文档可能会很有用。例如,对于 gcc,输入和输出都是无缓冲的(参考GNU C++ 库手册 - 流缓冲区)。