繁体   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