ホームページ > バックエンド開発 > C++ > C STDOUT をユーザー定義関数にリダイレクトするにはどうすればよいですか?

C STDOUT をユーザー定義関数にリダイレクトするにはどうすればよいですか?

DDD
リリース: 2024-11-01 01:04:02
オリジナル
256 人が閲覧しました

How to Redirect C   STDOUT to a User-Defined Function?

C STDOUT をカスタム関数にリダイレクトする

標準出力をファイルにリダイレクトするのは一般的な方法ですが、それを次のようにリダイレクトしたい場合はどうすればよいですか?あなたが定義した関数ですか?

たとえば、次の仮定のケースを考えてみましょう:

<code class="cpp">void MyHandler(const char* data);

// <Magical redirection code>

printf("test");
std::cout << "test" << std::endl;

// MyHandler should have been called with "test" twice at this point</code>
ログイン後にコピー

ソリューション

@Konrad Rudolph が指摘したように、stdout を関数にリダイレクトするostringstreamを使用すると可能です。その方法は次のとおりです。

<code class="cpp">// Redirect cout.
std::streambuf* oldCoutStreamBuf = std::cout.rdbuf();
std::ostringstream strCout;
std::cout.rdbuf(strCout.rdbuf());

// This goes to the string stream.
std::cout << "Hello, World!" << std::endl;

// Restore old cout.
std::cout.rdbuf(oldCoutStreamBuf);

// Will output our Hello World! from above.
std::cout << strCout.str();</code>
ログイン後にコピー

このメソッドは cout、cerr、clog に対して機能しますが、通常 stdout ストリームと stderr ストリームの両方を対象とする printf などの関数のすべての stdout をリダイレクトしない可能性があります。

より大きなデータの場合は、freopen()、setbuf()、dup()、およびdup2() を使用することができます。これらの操作には、もう少しシステムレベルの理解が必要であり、パイプの作成やファイル記述子の操作が含まれる場合があります。

以上がC STDOUT をユーザー定義関数にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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