標準出力を C の関数にリダイレクトするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-31 09:35:02
オリジナル
639 人が閲覧しました

How Can I Redirect Standard Output to a Function in C  ?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート