首頁 >後端開發 >C++ >如何將標準輸出重定向到 C 中的函數?

如何將標準輸出重定向到 C 中的函數?

Susan Sarandon
Susan Sarandon原創
2024-10-31 09:35:02710瀏覽

How Can I Redirect Standard Output to a Function in C  ?

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

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