首頁 > 後端開發 > C++ > 主體

如何將 STDOUT 重定向到 C 中的自訂函數?

Linda Hamilton
發布: 2024-10-29 18:37:04
原創
923 人瀏覽過

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

將STDOUT 重定向到自訂處理程序

在您希望自訂通常定向到stdout 流的輸出的應用程式中,您可能會尋求方法將其重定向到其他地方。雖然眾所周知,您可以將 stdio 重定向到文件,但為什麼不考慮將其重定向到您自己定義的函數呢?

了解 C 的標準輸出

首先,了解 stdout 以及 stderr 和 stdin 代表未格式化資料的預定義輸出流至關重要。 printf 函數和 C iostream 一樣,利用 stdout 來顯示輸出。

透過 ostringstream 實現重定向

重定向到自訂函數確實是可行的。對於 cout、cerr 和 clog 串流,您可以藉助 ostringstream 來實現此目的,而無需實現自己的 Streambuf。以下是範例程式碼片段:

<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 的輸出,但它可能不會起作用無縫地用於標準輸出和標準錯誤。例如,printf 不會輸出到自訂函數。

對於較小的資料大小,使用 freopen 或 setbuf 是一個可行的選擇。但是,對於大量數據,建議使用複雜的 dup 或 dup2 機制,其中涉及重定向到管道。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!