接管stdout輸出,重定向到指定管道,不需要的時候則恢復。
建立管道,通過微軟的dup儲存預設stdout,_dup2介面重定向,再通過_dup2恢復回來。
參考以下**。
int hstdout;
int hstdoutpipe[2];
if (_pipe(hstdoutpipe, out_buff_size, o_binary | o_noinherit) == -1)
return -1;
hstdout = _dup(_fileno(stdout)); // 備份預設stdout
if (_dup2(hstdoutpipe[write_handle], _fileno(stdout)) != 0)
return -2;
_close(hstdoutpipe[write_handle]);
printf("test"); // 重定向後,測試一下輸出
fflush(stdout);
// 恢復預設stdout:
if (_dup2(hstdout, _fileno(stdout)) != 0)
return 3;
_close(hstdout);
printf("123"); // 恢復後,再測試
fflush(stdout);
// 測試一下接管期間管道拿到的stdout的資料
char szbuffer[out_buff_size];
for (;;) else
break;
} _close(hstdoutpipe[read_handle]);
結束。
有任何問題**入qq群:222670733
重定向stdout到檔案
把stdout重定向到檔案 兩種方法 第一種方法沒有恢復 通過freopen把stdout重新開啟到檔案 include file stream void main void fprintf stdout,this is not print out n 這裡沒有輸出 system ls 沒有會造成問...
重定向 管道
1 輸入輸出重定向可分為 標準輸入 由鍵盤輸入 標準輸出 由監視器輸出 錯誤輸出 與標準輸出相同,但是他們是具有各自的資料流,各佔乙個資料流 通常用識別符號對位 標準輸入用0,標準輸出用1,錯誤輸出用2。重定向 顧名思義就是將標準的輸入和輸出位置重新定向 覆蓋重定向 每一次的輸出都要覆蓋原始檔中的內...
重定向管道
重定向 將預設的標準輸入 輸出 錯誤裝置改變到新的目標 將預設的標準輸入 輸出 錯誤裝置改變到新的目標,如果原目標存在,此操作將覆蓋原目標 set c 禁止覆蓋原檔案 set c 允許覆蓋原檔案 將預設的標準輸入 輸出 錯誤裝置改到新的目標,此操作不會覆蓋原目標,只會追加在原目標之後 root ce...