Для перенаправления stdout в область памяти (или файл) необходимо написать небольшую конструкцию. Редирект в память или строку (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 ); |