2013-10-27 13 views
0

說我有輸入操作:緩衝區如何知道在刷新操作期間從外部文件傳輸多少個字符?

file >> x; 

如果file內部緩衝器是空的underflow()將被調用來從外部設備輸入字符的file內部緩衝器。如果在此刷新操作之後緩衝區將被部分或完全填充,則是實現定義的。考慮到這一點,是否有可能如果x是一個字符串,並且我期待輸入值達到一定的長度,那麼緩衝區是否在右側傳輸的字符數少於這個值?這可能發生嗎?

+0

我不明白Master Bruce:D – P0W

+0

我從來沒有研究過streambuf是如何工作的,我從來沒有打算過。但是如果在緩衝區耗盡之前沒有找到分隔符,不會再調用'underflow'來獲取更多的字符嗎? –

+0

@BenjaminLindley這就是我寫這個問題後的想法。 – 0x499602D2

回答

2

有多少個字符underflow()可用,沒有真正的限制。唯一真正的約束是沒有達到EOF的流至少需要一個可用的字符。關於具體的std::filebuf(或std::basic_filebuf<...>),流可能是無緩衝的(如果調用setbuf(0, 0)),在這種情況下,它確實可以使單個字符可用。否則,流將嘗試填充其內部緩衝區,並依靠操作系統在底層操作數少的情況下返回適當的字節數。

我不知道我很明白你的問題:操作file >> x將返回一旦x完全讀取如果file所示的與流已經到達終點時或空白字符被發現,它可以發生(如果用「字符串「,你的意思是char*,存儲在file.width()中的非零值也被考慮在內)。關於基礎流緩衝器,明確地x可能需要對基礎表示進行多次讀取,即不可預知對於underflow()進行了多少次調用。鑑於文件的內部緩衝區可能與光盤的塊大小相匹配,我預計最多隻有一次調用underflow()是爲「普通」字符串製作的。但是,如果讀取的文件很大並且不包含任何空格,則可能會調用underflow()。鑑於流需要查找空白空間,無法預測首先需要多少個字符。

相關問題