在 C 中重定向 STDOUT
在程式設計中通常需要重新設計輸出流以滿足特定的應用程式要求。本文解決了將 STDOUT 的輸出重定向到自訂函數的查詢,深入研究了所涉及的底層機制並提供了實用的解決方案。
重定向技術
儘管將 STDOUT 重定向到文件的常識,重定向到函數的概念同樣可行。此技術利用指定函數 MyHandler 來接收和處理本來會傳送到 STDOUT 的資料。
實作
實作圍繞重定向 cout 和 cerr 流到字串流 (ostringstream)。這是一個簡化的範例:
<code class="cpp">// Redirect cout streambuf* oldCoutStreamBuf = cout.rdbuf(); ostringstream strCout; cout.rdbuf(strCout.rdbuf()); // Custom function void MyHandler(const char* data) {} // Output to the string stream cout << "Hello, World!" << endl; // Restore original cout cout.rdbuf(oldCoutStreamBuf); // Display the collected output from the string stream cout << strCout.str();</code>
不幸的是,此方法僅重定向專門用於 cout 的數據,而不是發送到 STDOUT 的整個輸出。例如,printf 輸出不會被重定向。
其他選項
要實現更全面的輸出重定向,請考慮使用 freopen、setbuf 或 dup 和 dup2 等技術系統呼叫。請注意,雖然這些方法允許重定向 STDOUT 輸出,但它們有一定的限制,可能不適用於所有場景。
以上是如何將 STDOUT 重定向到 C 中的自訂函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!