C++

Перенаправление 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 );
Теги:
stdout, файл
Добавлено: 11 Апреля 2018 10:48:37 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...