Редирект в память или строку (std::string)// make stdout buffer
char buf[16384]={0};
int fdpipe[2];
// make pipe
_pipe( fdpipe, sizeof(buf), O_BINARY );
// backup stdout handle
int old=_dup(_fileno(stdout));
// replace stdout handle with write-pipe
_dup2(fdpipe[1], _fileno(stdout));
// test output
fprint(stdout,"test");
// get collected buffer
int r = read(fdpipe[0],buf,sizeof(buf));
buf[r]=0;
// restore original stdout
_dup2(old, _fileno(stdout));
// make string
std::string str(buf);
Пример для работы с STL std::cout std:stringstream oss;
std::cout.rdbuf( oss.rdbuf() );
std::cout << "here's some text";
Пример редиректа в файлstream = freopen( "freopen.out", "w", stderr );
fprintf( stdout, "successfully reassigned\n" );
fclose( stream );
|