C での STDOUT のリダイレクト
特定のアプリケーション要件に対応するには、プログラミングにおける出力フローの再設計が必要になることがよくあります。この記事では、STDOUT 宛ての出力をカスタム関数にリダイレクトするというクエリに対処し、関連する基礎的なメカニズムを詳しく調べ、実用的なソリューションを提供します。
リダイレクト手法
STDOUT をファイルにリダイレクトするという一般的な知識と同様に、関数へのリダイレクトの概念も同様に実現可能です。この手法では、指定された関数 MyHandler を利用して、STDOUT に送信されるデータを受信して処理します。
実装
この実装は、cout ストリームと cerr ストリームのリダイレクトを中心に展開します。文字列ストリーム (ostringstream) に変換します。簡略化した例を次に示します。
<code class="cpp">// Redirect cout streambuf* oldCoutStreamBuf = cout.rdbuf(); ostringstream strCout; cout.rdbuf(strCout.rdbuf()); // Custom function void MyHandler(const char* data) {} // Output to the string stream cout << "Hello, World!" << endl; // Restore original cout cout.rdbuf(oldCoutStreamBuf); // Display the collected output from the string stream cout << strCout.str();</code>
残念ながら、このメソッドは特に cout 向けのデータのみをリダイレクトし、STDOUT 向けの出力全体をリダイレクトするわけではありません。たとえば、printf 出力はリダイレクトされません。
追加オプション
より包括的な出力リダイレクトを実現するには、freopen、setbuf、または dup および dup2 などの手法の使用を検討してください。システムコール。これらの方法では STDOUT 出力のリダイレクトが可能ですが、特定の制限があり、すべてのシナリオに適しているわけではないことに注意してください。
以上がSTDOUT を C のカスタム関数にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。