2011-11-10 10 views
2

コンソールにエラーを出力する外部ライブラリを使用するGLアプリケーションを作成しています。私はそれをつかみ、ゲーム内のコンソールで印刷したいと思う。stdoutストリームとstderrストリームをリダイレクトする方法(マルチプラットフォーム)

PS:申し訳ありませんが、私の悪い英語のために....

+0

http://homepage.ntlworld.com/jonathan deboynepollard/FGA/redirecting-standard-io.html – Flexo

答えて

3

あなたはこれに取ることができる2つの基本的なアプローチがあります。

  1. は、ライブラリのすべての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; 
    } 
    
  2. あなたは、例えば、プラットフォーム固有のアプローチを使用することができますPOSIXシステムの場合はdup2() will allow you to replace a file descriptor with another one、Windowsの場合はSetStdHandle()です。おそらく別のファイルではなくパイプを使用したいと思うでしょうし、ブロックすることを本当に慎重にする必要があります(専用のスレッドがほしいかもしれません)。

関連する問題