將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中文網其他相關文章!