本程序stdout重定向到管道 以及恢復

2021-10-24 08:32:41 字數 870 閱讀 7999

接管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...