I\'m writing GL application that uses external libs, which print errors to the console. I want to catch that and print in the in-game console.
PS: Sorry, for my bad engl
There are two basic approaches you could take to this:
If the libraries all use std::cout
for the IO you want to capture you can write your own basic_streambuf. You can then just call std::cout.rdbuf(mybufinst);
to replace the streambuffer, for example using the std::basic_stringbuf
:
#include <sstream>
#include <iostream>
int main() {
static std::basic_stringbuf<std::ostream::char_type> buf;
std::cout.rdbuf(&buf);
std::cout << "Hello captured world!\n";
std::cerr << "Stole: " << buf.str() << std::endl;
}
You can use a platform specific approach, e.g. on POSIX systems dup2() will allow you to replace a file descriptor with another one, or on Windows with SetStdHandle(). You'd want to use pipes rather than just another file probably and you'd need to be really careful about blocking (so probably want a dedicated thread)