Перенаправление stdout в область памяти (или файл)
Автор: Алексей Кузнецов
Для перенаправления 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 );
Оставить комментарий
Комментарии
1.
2 мая 2007, 19:17:24
Адрес статьи автора: http://axet.blogspot.com/2007/04/redirect-stdout-stderr-to-file.html
2.
23 апреля 2007, 18:23:00
Перенаправление в файл через bash безусловно удобно, для командного режима. Если вам необходимо управлять потоками из внешнего приложения для перехвата вывода консолей, без такой обработки не обойтись.
3.
23 апреля 2007, 18:21:56
Последняя версия документа доступна: http://docs.google.com/Doc?id=dd4b849c_109gnc76b
4.
24 марта 2007, 20:26:53
На Unix, мне как-то больше нравится конструкция ' > ' ( при перенаправлении в файл). :-)
5.
+1 / -0
11 марта 2007, 15:48:57
Вопросы? Пожелания? Алексей Кузнецов <axet@mail.ru>