看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《charleshu (Analog Engineer)》之銘言: : 這類底層問題應該直接呼叫 Win32 API : 呼叫CreateProcess : 並請將新Process的STDIN和STDOUT改指向兩個Pipe即可. 可以藉題問一下嗎? 我想要 a.exe | b.exe 也就是 a.exe 輸出 STDOUT 到 getstdin.exe 其中 a.exe 是我所能掌控的 getstdin.exe 是一個只能接收 STDOUT 的程式 但是 a.cpp 中會用到一些無法掌控的 library 比如在 a.cpp 中要呼叫 external() 正常來講,應該是沒有問題的 可是這個 external() 會輸出一些東西到 STDOUT 使得 a.exe 輸出的 STDOUT 會混到一些奇怪的東西 我該怎麼把 external() 附帶的 STDOUT 給濾掉呢? 有用過一個很蠢的替代方案 (a.exe) stderr -> stdin (mid.exe) stdout -> stdin (getstdin.exe) 其中 a.exe 會以 CreateProcess 來執行 mid.exe 而 mid.exe 也會以 CreateProcess 來執行 getstdin.exe 這樣子問題好像解決了,只不過本來可以很彈性、很系統的命令列執行 就變得很奇怪了 ========================= a.cpp 中使用的是很基本的方式寫入 STDOUT fprintf(stdout, "1234"); external(); // 這裡會寫入一些字串到 STDOUT fprintf(stdout, "5678"); 本來預期 a.exe 輸出到 STDOUT 的應該是 12345678 但是 external() 的亂入會變成 1234XXOOXX5678 有辦法在 external() 之前先暫時把 STDOUT 導向 NULL 然後在其之後重新導回正常的 STDOUT pipe 嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.229.7.117
Dannvix:什麼平台呢?Unix 可以藉由 dup() 與 close() 辦到 07/15 14:19
logs:Windows + VC2008 可以嗎? 07/15 18:27