解决方法
正如Ben Voigt指出的那样,你想要将streambuf子类化.南加州大学网站上有一些页面,其中包含
documentation,header和
source,用于包含文件*的streambuf子类(stdiobuf)的GNU实现.它有一些依赖于它是(GroovX)的一部分的库,但那些应该很容易删除(我将首先删除所有对GVX_TRACE的引用).
有趣的是,尽管Ben Voigt所说,它还提供了std :: iostream的简约子类(stdiostream).但这似乎没有必要,因为stdiostream类用于将stdiobuf类连接到流对象的rdbuf(“读缓冲区”/设置流缓冲区)方法是公共可访问的.
你可以找到更多关于子类化streambuf here的内容(特别是在页面底部,讨论虚拟函数).上面链接的实现覆盖sync
,underflow
(支持输入)和overflow
(支持输出).
关于链接实现的进一步说明:
> init方法使用setg
和setp
方法设置输入和输出序列的指针.
>行const int num = pptr() – pbase();通过从current output pointer中减去base output pointer来计算要冲洗的字符数(“放置指针”).>无效名为om的变量是mode参数.>名为fd的变量是文件描述符.