コンソールにエラーを出力する外部ライブラリを使用するGLアプリケーションを作成しています。私はそれをつかみ、ゲーム内のコンソールで印刷したいと思う。stdoutストリームとstderrストリームをリダイレクトする方法(マルチプラットフォーム)
PS:申し訳ありませんが、私の悪い英語のために....
コンソールにエラーを出力する外部ライブラリを使用するGLアプリケーションを作成しています。私はそれをつかみ、ゲーム内のコンソールで印刷したいと思う。stdoutストリームとstderrストリームをリダイレクトする方法(マルチプラットフォーム)
PS:申し訳ありませんが、私の悪い英語のために....
あなたはこれに取ることができる2つの基本的なアプローチがあります。
は、ライブラリのすべてのIOのためstd::cout
を使用する場合は、あなたがしたいですキャプチャすることができますwrite your own basic_streambuf
。その後、ちょうどstd::basic_stringbuf
を使用して、たとえば、ストリームバッファを置き換えるためにstd::cout.rdbuf(mybufinst);
を呼び出すことができます。
#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;
}
あなたは、例えば、プラットフォーム固有のアプローチを使用することができますPOSIXシステムの場合はdup2()
will allow you to replace a file descriptor with another one、Windowsの場合はSetStdHandle()
です。おそらく別のファイルではなくパイプを使用したいと思うでしょうし、ブロックすることを本当に慎重にする必要があります(専用のスレッドがほしいかもしれません)。
http://homepage.ntlworld.com/jonathan deboynepollard/FGA/redirecting-standard-io.html – Flexo