读书人

纯C++可否重定向标准输入输出?解决方案

发布时间: 2012-03-18 13:55:39 作者: rapoo

纯C++可否重定向标准输入输出?
unix下面可以用下面这样的代码重定向标准io,然后再重定向回来:

C/C++ code
int i=dup(0);int o=dup(1);freopen("a.in","r",stdin):freopen("b.out","w",stdout);dup2(i,0);dup2(o,1);


纯标准C++能做到么? 不借助管道的话,纯粹重定向标准I/O,怎么做?

[解决办法]
C++是通过rdbuf函数来进行流重定向的,例如:

#include <iostream>
#include <fstream>

using std::cout;
using std::streambuf;
using std::rdbuf;
using std::ofstream;

int main( void )
{
ofstream fout( "out.txt" );
streambuf * OldBuf = cout.rdbuf( fout.rdbuf( ) ); //保存cout的流缓冲类指针并用fout的流缓冲类指针代替
cout << "example"; //cout的内容被写入文件out.txt中
cout.rdbuf( OldBuf ); //恢复cout的流缓冲类指针
cout << "reload"; //恢复输出到终端
return 0;
}

读书人网 >C++

热点推荐