Перенаправление 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>
