簡體   English   中英

如何禁用boost :: iostreams接收器中的緩沖區?

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

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