如何將printf的輸出重定向到例如流或其他東西?我有一個與控制檯庫鏈接的GUI應用程序。該庫重複調用printf。我需要一種方法來攔截這些內容並讓它們通過函數進行處理。另外,創建控制檯不是一個選項。我使用Windows,順便說一句。重定向printf?
編輯 - 另外我希望不要重定向到一個文件。
如何將printf的輸出重定向到例如流或其他東西?我有一個與控制檯庫鏈接的GUI應用程序。該庫重複調用printf。我需要一種方法來攔截這些內容並讓它們通過函數進行處理。另外,創建控制檯不是一個選項。我使用Windows,順便說一句。重定向printf?
編輯 - 另外我希望不要重定向到一個文件。
如果您想避免使用文件,您可以使用命名管道,將stdout重定向到它並在不同的線程或進程中讀取它。
一些僞省略錯誤檢查:
HANDLE hPipe = CreateNamedPipe("\\.\pipe\SomePipeName", ...);
int pipeFileDescriptor = _open_osfhandle(hPipe, someFlags);
_dup2(pipeFileDescriptor, _fileno(stdout));
現在什麼printf
寫入stdout
應該去管。
在另一個線程或進程可以從管道中讀入緩衝區:
HANDLE hPipeClient = CreateFile("\\.\pipe\SomePipeName", ...);
ReadFile(hPipeClient, ...);
我認爲這會工作,但我還沒有測試它。
freopen(filename,mode,stdout);