gpt4 book ai didi

c++ - 如何禁用 boost::iostreams 接收器中的缓冲区?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:07 25 4
gpt4 key购买 nike

我已经使用 boost::iostreams 编写了一个“接收器”,这样当有人试图写入 iostream 对象时,我基本上可以让我自己的代码运行。

不幸的是,系统中某处有一个缓冲区,因此我的 Sink 的 write() 函数仅每 4kB 左右被调用一次。这是一个问题,因为我正在实现的接收器是固定大小(例如 128 字节),所以一旦写入了这么多数据,它就需要向调用者返回一个错误(类似于“磁盘已满”。)

由于缓冲区,调用者能够写入几千字节的数据并且没有返回任何错误,然后当缓冲区被刷新时,额外的数据会悄无声息地丢失,这给我带来了问题。

有谁知道是否可以以某种方式禁用此缓冲区?我在这里尝试了很多针对通用 iostream 的建议(例如 pubsetbuf),但它们似乎都不适用于 Boost 实现。

问题代码是我正在处理的库的一部分,它是 available from GitHub如果它有帮助(运行“make check”,您将看到一个由于这个问题而失败。)

如有任何建议,我们将不胜感激!

最佳答案

我想我找到了解决方法。您必须手动决定何时执行刷新,但如果您进行搜索 - 甚至搜索相同的位置,即 stream.seekp(0, std::ios::cur) -然后它将导致所有内容都按预期刷新。

这是一个有点糟糕的解决方法,但它似乎在大多数时候都能完成工作。

关于c++ - 如何禁用 boost::iostreams 接收器中的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3523780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com