C++ I/O 重定向

C++ I/O 重定向

最近的项目需要把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

你可能感兴趣的:(C++ I/O 重定向)