首頁 >後端開發 >C++ >如何將 C STDOUT 重新導向到使用者定義的函數?

如何將 C STDOUT 重新導向到使用者定義的函數?

DDD
DDD原創
2024-11-01 01:04:02254瀏覽

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

將C STDOUT 重定向到自訂函數

將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,但它可能無法重定向 printf 等函數的所有 stdout,這些函數通常同時針對 stdout 和 stderr 流。

對於更大的數據,可以採用更先進的技術,如 freopen()、setbuf()、dup() 和 dup2()。這些操作需要更多的系統級理解,並且可能涉及創建管道或操作文件描述符。

以上是如何將 C STDOUT 重新導向到使用者定義的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn