在 C 中重定向標準輸出
在 C 中,標準輸出流 (stdout) 通常會將資料傳送至控制台。但是,在某些情況下,您可能想要將此輸出重定向到自訂函數進行處理。
使用 ostringstream 重定向到函數
將 stdout 重定向到的一種方法函數是利用 ostringstream。這是一個基於記憶體的流緩衝區,本質上捕獲指向它的任何流的輸出。
<code class="cpp">// Declare a new ostringstream ostringstream strCout; // Redirect cout to the ostringstream cout.rdbuf(strCout.rdbuf()); // Write to the ostringstream cout << "test" << endl; // Restore the original cout stream cout.rdbuf(oldCoutStreamBuf);</code>
現在,strCout 物件包含本應發送到 stdout 的輸出。然後,您可以將此輸出傳遞給自訂函數以進行進一步處理。
<code class="cpp">void MyHandler(const char* data) { // Process the data from strCout.str() } MyHandler(strCout.str().c_str());</code>
使用系統調用重定向到函數
另一種方法是使用系統調用,例如freopen() 或setbuf() 將標準輸出重定向到管道。這允許您在單獨的進程或線程中捕獲輸出。
<code class="cpp">// Open a file stream to a named pipe FILE* pipe = fopen("my_pipe", "w"); // Redirect stdout to the pipe setbuf(stdout, pipe); // Write to stdout printf("test"); // Close the pipe fclose(pipe);</code>
printf 的輸出現在將寫入管道。然後,您可以建立一個單獨的進程或執行緒來從管道中讀取資料並執行所需的處理。
限制
請注意,使用 ostringstream 重定向 stdout 只會影響來自的輸出庫特。其他串流(如 printf 或 stderr)仍可能輸出到控制台。對於完整的重定向,請考慮使用系統呼叫方法或實作自訂streambuf。
以上是如何將標準輸出重定向到 C 中的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!