C++重定向

需求:一份C++源码中许多 cout<<....<

实现: 将标准输出(cout)重定向到文件out.txt中

freopen("out.txt","w",stdout);

该函数一般用于对标准输入、标准输出以及标准出错流的重定向,实验证明对于普通的文件重定向本函数也可以完成。首先获得FILE指针

FILE *lpf = fopen("out.txt","w");

然后还是通过函数freopen进行文件流的重定向,freopen函数的定义如下:

FILE *freopen(const char *filename,const char *type, FILE *stream);
所以重定向语句为:
freopen("outb.txt","w",lpf);

测试下重定向效果

fprintf(lpf,"hello world");
结果显示,“hello world”出现了文件outb.txt中,重定向成功。

以上这些都是C语言范围内的重定向机制,C++重定向主要由函数rdbuf完成。rdbuf原型如下两个重载函数:

streambuf* rdbuf () const;  streambuf* rdbuf (streambuf*) ;
C++流有个“成员变量”叫流缓冲区streambuf,①函数 获得流缓冲区,②函数 设置流缓冲区。如下代码:
streambuf *streamBuf;     ③
ifstream fin;             ④
fin.open("data.in");      ⑤
backup = cin.rdbuf();     ⑥
cin.rdbuf(fin.rdbuf());   ⑦
cin.rdbuf(streamBuf);     ⑧

其中语句⑥获取保存输入文件的流缓冲区,语句⑦将标准输入的流缓冲区从默认的控制台流缓冲区变为文件的流缓冲区,⑧函数恢复标准输入的流缓冲区。现做如下测试:

ofstream outf(“out.txt”);
streambuf * buf;
buf = cout.rdbuf();
cout.rdbuf(outf.rdbuf());
cout<<"C++ file stream"<

结果显示,语句“C++ file stream”进入文件out.txt中,终端显示“hello world”。

C++的流缓冲区的模式,为编程带来了方便,并且由于C++采用的是底层的流缓冲模式,具有较高的效率。

参考文章:

http://blog.sina.com.cn/s/blog_0001988f0100njup.html               C++流 rdbuf()

http://hi.baidu.com/gluce/item/d5d4f2340263d04c3175a12f       C/C++重定向

你可能感兴趣的:(C\C++)