代码之家  ›  专栏  ›  技术社区  ›  Malvineous

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

  •  2
  • Malvineous  · 技术社区  · 14 年前

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

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

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

    1 回复  |  直到 14 年前
        1
  •  0
  •   Malvineous    14 年前

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

    推荐文章