问题
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 english....
回答1:
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 callstd::cout.rdbuf(mybufinst);
to replace the streambuffer, for example using thestd::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)
来源:https://stackoverflow.com/questions/8076830/how-to-redirect-stdout-and-stderr-streams-multiplatform