![](/img/trans.png)
[英]How to disable boost::iostreams buffer when reading through a filter chain
[英]How can you disable the buffer in a boost::iostreams sink?
我已經使用boost :: iostreams編寫了一個“接收器”,這樣當有人嘗試寫入iostream對象時,我就可以運行自己的代碼。
不幸的是,系統中某處有一個緩沖區,所以我的Sink的write()函數大約每4kB才被調用一次。 這是一個問題,因為我要實現的接收器是固定大小(例如128字節),因此一旦寫入了如此多的數據,就需要向調用者返回錯誤(類似於“磁盤已滿”。)
由於有緩沖區,因此調用方能夠寫入幾千字節的數據,並且不會返回任何錯誤,然后在刷新緩沖區后,多余的數據會被靜默丟失,這給我帶來了麻煩。
有誰知道是否有可能以某種方式禁用此緩沖區? 我在這里嘗試了許多有關通用iostream的建議(例如pubsetbuf),但似乎沒有一個建議適用於Boost實現。
問題代碼是我正在使用的庫的一部分,如果有幫助, 可以從GitHub獲得 (運行'make check',您將看到由於此問題而導致的一個失敗。)
任何建議將不勝感激!
我想我已經找到了解決方法。 您必須手動決定何時要執行刷新,但是如果執行搜索-甚至搜索到相同的位置,即stream.seekp(0, std::ios::cur)
-那么它將導致一切按預期沖洗。
這是一個可怕的解決方法,但似乎大多數時候都能完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.