我已經使用boost :: iostreams編寫了'sink',這樣當有人試圖寫入iostream對象時,我基本上可以運行自己的代碼。如何禁用boost :: iostreams接收器中的緩衝區?
不幸的是系統中有一個緩衝區,所以我的Sink的write()函數每4kB左右纔會被調用。這是一個問題,因爲我正在實現的接收器是固定大小(例如128字節),所以一旦寫入了大量數據,它就需要向調用者返回一個錯誤(類似'磁盤滿')。
因爲調用者可以寫入幾千字節的數據並且不返回任何錯誤,然後當緩衝區被刷新時,額外的數據會悄悄丟失,這會造成我的問題。
有誰知道是否有可能以某種方式禁用此緩衝區?我在這裏嘗試了很多關於通用iostreams的建議(例如pubsetbuf),但是他們似乎都不適用於Boost實現。
問題的代碼是我工作的一個庫,它是available from GitHub是否有幫助的部分(執行「make檢查」,你會看到,因爲這個問題的一個失敗。)
任何建議將不勝不勝感激!
嗯......關於緩衝的文檔說''[在下一個版本中提供]''日期爲2008年2月2日'......嘆...... – Inverse 2011-04-15 19:53:02