DataLife Engine > C++ > Перенаправление stdout в область памяти (или файл)
Перенаправление stdout в область памяти (или файл)28 сентября 2007. Разместил: podpole |
Для перенаправления 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 ); |