兔子的技术博客

兔子

   :: 首页 :: 联系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新评论

阅读排行榜

评论排行榜

最近的项目需要把cerr的输出写到文件中去,于是开始找这方面的资料。其实I/O重定向是非常简单的。

base_io有个rdbuf方法,它的定义如下:

    basic_streambuf<Elem, Traits> rdbuf() const;
    basic_streambuf<Elem, Traits>* rdbuf(basic_streambuf<Elem, Trais> *_Sb);

事实上,每个C++ 的I/O都有一块独立的缓冲区,只有当调用flush时才把其中的内容写入到文件或输出到屏幕,我们只需要把这块缓冲区的指针替换成别的指针就能实现重定向。MSDN给出了一个非常简洁的例子:

main() {
    ofstream file("data.txt");
    streambuf* x = cout.rdbuf(file.rdbuf());
    cout<<"Hello"<<endl;     // 这一句将会输出到文件
    cout.rdbuf(x);
    cout<<"World"<<endl;    // 这一句将会输出到屏幕
}

这段代码虽然简单,但要注意,如果I/O的缓冲区不可用,比如上面,在没重新设置cout.rdbuf前就关闭了文件,那么程序Crash掉了。

转自:http://hi.baidu.com/ani_di/blog/item/129427310cfc7695a8018ef7.html
posted on 2010-06-05 17:26 会飞的兔子 阅读(716) 评论(0)  编辑 收藏 引用 所属分类: C++库,组件C++及开发环境

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理