簡體   English   中英

如何禁用流上的緩沖?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM