STDOUT を C のカスタム関数にリダイレクトするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-29 18:37:04
オリジナル
922 人が閲覧しました

How Can You Redirect STDOUT to a Custom Function in C  ?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!