2014-01-29 47 views
0
struct encrypt_stream : public std::stringbuf 
{ 
    int sync() { encrypt_buffer(); flush_to_device(); } 
    ... 
private: 
    void encrypt_buffer(); 
    void flush_to_device(); 
}; 

我想写这个类来加密文本数据。每次刷新此stringbuf对象时,都会调用sync,并将加密版本的缓冲区发送到设备。加密文本强烈依赖于flush被调用的时刻。在没有用户请求的情况下,可以在此对象上调用flush这种棘手的情况吗?什么时候调用stringbuf :: flush?

我知道flush在收到std::endl时被调用,但是有没有其他的情况我不知道?

回答

4

flush()被称为在这些情况:

  • std::endl被使用(即显式调用std::ostream::flush())[§27.7.3.7/ 7]
  • 当流的析构函数称为[§27.5。 3.1.6/4]
  • 当它是tie() -ed的流执行读取。 [§27.7.2.1.3/ 2]
  • 当文件流重新定位时。
  • 当流已经达到在其缓冲器中,当overflow()被调用以提取内容到外部设备的最大分配字符,[§27.6.3.4.5/ 3]
  • 或在输入流的情况下,当gptr() == egptr()时,呼叫underflow()放弃内容并将其缓冲区与外部设备同步。 [§27.6.3.4.3/ 7]

这就是我对标准IOStreams的了解。这可能会根据您的流或流缓冲区的实现而有所不同。

+1

好,但_ [引用需要] _ –

+0

@LightnessRacesinOrbit当我们说话时,我正在狩猎。 :) – 0x499602D2

相关问题