[英]How to disable buffering on a stream?
在 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
)對文件流的影響做了以下說明:
如果在該流上發生任何 I/O 之前對該流調用
setbuf(0,0)
,則該流將變為無緩沖。 否則,結果是實現定義的。 “無緩沖”意味着pptr()
pbase()
和pptr()
總是返回 null 並且輸出到文件應該盡快出現。
第一句保證上述代碼使流無緩沖。 請注意,某些編譯器(例如 gcc)將打開文件視為對流的 I/O 操作,因此應在打開文件之前調用pubsetbuf
(如上所述)。
然而,最后一句話似乎暗示這僅適用於輸出,而不適用於輸入。 我不確定這是疏忽還是有意為之。 查閱您的編譯器文檔可能會有所幫助。 例如,對於 gcc,輸入和輸出都是無緩沖的(參考GNU C++ 庫手冊 - 流緩沖區)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.