2010-08-19 37 views
2

我已經使用boost :: iostreams編寫了'sink',這樣當有人試圖寫入iostream對象時,我基本上可以運行自己的代碼。如何禁用boost :: iostreams接收器中的緩衝區?

不幸的是系統中有一個緩衝區,所以我的Sink的write()函數每4kB左右纔會被調用。這是一個問題,因爲我正在實現的接收器是固定大小(例如128字節),所以一旦寫入了大量數據,它就需要向調用者返回一個錯誤(類似'磁盤滿')。

因爲調用者可以寫入幾千字節的數據並且不返回任何錯誤,然後當緩衝區被刷新時,額外的數據會悄悄丟失,這會造成我的問題。

有誰知道是否有可能以某種方式禁用此緩衝區?我在這裏嘗試了很多關於通用iostreams的建議(例如pubsetbuf),但是他們似乎都不適用於Boost實現。

問題的代碼是我工作的一個庫,它是available from GitHub是否有幫助的部分(執行「make檢查」,你會看到,因爲這個問題的一個失敗。)

任何建議將不勝不勝感激!

+0

嗯......關於緩衝的文檔說''[在下一個版本中提供]''日期爲2008年2月2日'......嘆...... – Inverse 2011-04-15 19:53:02

回答

0

我想我找到了一個解決方法。您必須手動決定何時執行沖洗,但是如果您執行尋找 - 即使尋求相同的位置(即stream.seekp(0, std::ios::cur)),那麼它也會導致所有內容按預期沖洗。

這是一個可怕的解決方法,但它似乎在大多數時間完成這項工作。

相關問題