STDOUT をカスタム ハンドラーにリダイレクトする
通常、stdout ストリームに送信される出力を調整したいアプリケーションでは、次の方法を模索できます。他の場所にリダイレクトします。標準出力をファイルにリダイレクトできることはよく知られていますが、独自の定義の関数にリダイレクトすることを検討してみてはいかがでしょうか?
C の標準出力を理解する
まず、stdout が stderr および stdin とともに、フォーマットされていないデータの事前定義された出力ストリームを表すことを理解することが重要です。 printf 関数および C iostream は、出力を表示するために stdout を利用します。
ostringstream によるリダイレクトの実現
カスタム関数へのリダイレクトは確かに可能です。 cout、cerr、および clog ストリームの場合、独自の streambuf を実装することなく、ostringstream を使用してこれを実現できます。サンプル コード スニペットは次のとおりです。
<code class="cpp">// Redirect cout. streambuf* oldCoutStreamBuf = cout.rdbuf(); ostringstream strCout; cout.rdbuf( strCout.rdbuf() ); // Output goes to the string stream. cout << "Hello, World!" << endl; // Restore original cout. cout.rdbuf( oldCoutStreamBuf ); // Retrieve content from the string stream. cout << strCout.str();</code>
注意事項と代替メソッド
このメソッドは cout、cerr、および clog の出力をリダイレクトできますが、機能しない可能性があります。 stdout と stderr をシームレスに処理します。たとえば、printf はカスタム関数に出力しません。
データ サイズが小さい場合は、freopen または setbuf を使用することが現実的なオプションです。ただし、大量のデータの場合は、パイプへのリダイレクトを含む、高度な dup または dup2 メカニズムを使用することをお勧めします。
以上がSTDOUT を C のカスタム関数にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。