我使用 boost::iostreams 编写了一个“接收器”,这样当有人尝试写入 iostream 对象时,我基本上可以运行我自己的代码。
不幸的是,系统中某处有一个缓冲区,因此我的 Sink 的 write() 函数仅每 4kB 左右调用一次。这是一个问题,因为我正在实现的接收器是固定大小(例如 128 字节),因此一旦写入了这么多数据,它就需要向调用者返回错误(类似于“磁盘已满”。)
由于缓冲区的原因,调用者能够写入几千字节的数据并且没有返回错误,然后当缓冲区被刷新时,额外的数据会默默地丢失,这给我带来了问题。
有谁知道是否有可能以某种方式禁用此缓冲区?我在这里尝试了很多关于通用 iostream(例如 pubsetbuf)的建议,但它们似乎都不适用于 Boost 实现。
问题代码是我正在处理的库的一部分,如果有帮助,可以从 GitHub 获得(运行“make check”,您将看到一个由于此问题而导致的失败。)
任何建议将不胜感激!