纯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;
}