C での標準出力のリダイレクト
C では、通常、標準出力ストリーム (stdout) がデータをコンソールに送信します。ただし、この出力を処理のためにカスタム関数にリダイレクトしたい場合があります。
ostringstream を使用した関数へのリダイレクト
標準出力をリダイレクトする 1 つのアプローチ機能は、ostringstream を利用することです。これはメモリベースのストリーム バッファであり、基本的に、それに向けられたストリームの出力をキャプチャします。
<code class="cpp">// Declare a new ostringstream ostringstream strCout; // Redirect cout to the ostringstream cout.rdbuf(strCout.rdbuf()); // Write to the ostringstream cout << "test" << endl; // Restore the original cout stream cout.rdbuf(oldCoutStreamBuf);</code>
ここで、strCout オブジェクトには、stdout に送られるはずの出力が含まれています。その後、この出力をカスタム関数に渡してさらなる処理を行うことができます。
<code class="cpp">void MyHandler(const char* data) { // Process the data from strCout.str() } MyHandler(strCout.str().c_str());</code>
システム コールを使用した関数へのリダイレクト
別のアプローチは、次のようなシステム コールを使用することです。 freopen() または setbuf() を使用して、標準出力をパイプにリダイレクトします。これにより、出力を別のプロセスまたはスレッドでキャプチャできるようになります。
<code class="cpp">// Open a file stream to a named pipe FILE* pipe = fopen("my_pipe", "w"); // Redirect stdout to the pipe setbuf(stdout, pipe); // Write to stdout printf("test"); // Close the pipe fclose(pipe);</code>
printf からの出力がパイプに書き込まれるようになります。その後、パイプから読み取り、必要な処理を実行するための別のプロセスまたはスレッドを作成できます。
制限事項
ostringstream を使用した stdout のリダイレクトは、からの出力にのみ影響することに注意してください。コート。 printf や stderr などの他のストリームは引き続きコンソールに出力される場合があります。完全なリダイレクトを行うには、システム コールのアプローチを使用するか、カスタム streambuf を実装することを検討してください。
以上が標準出力を C の関数にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。