Dev*_*lar 17 c++ buffer iostream
在C中,我可以轻松地将流设置为无缓冲的I/O:
FILE * f = fopen( "test", "r" );
setvbuf( f, (char *)NULL, _IONBF, 0 );
Run Code Online (Sandbox Code Playgroud)
如何使用C++ IOStream实现类似的无缓冲I/O?
San*_*ker 26
对于文件流,您可以使用pubsetbuf:
std::ifstream f;
f.rdbuf()->pubsetbuf(0, 0);
f.open("test");
Run Code Online (Sandbox Code Playgroud)
C++标准说明以下关于文件流的影响setbuf(以及因此pubsetbuf):
如果
setbuf(0,0)在该流上发生任何I/O之前在流上调用,则该流将变为无缓冲.否则结果是实现定义的."Unbuffered"表示pbase()并且pptr()始终返回null并且应该尽快显示输出到文件.
第一句保证上面的代码使流无缓冲.请注意,某些编译器(例如gcc)会在流上看到打开文件作为I/O操作,因此pubsetbuf应在打开文件之前调用(如上所述).
然而,最后一句似乎暗示这只是输出,而不是输入.我不确定这是否是疏忽,或者是否有意.咨询编译器文档可能很有用.对于gcc例如,输入和输出都是无缓冲的(参见GNU C++ Library Manual - Stream Buffers).