2009-11-06 69 views
4

如果我有用C++編寫的Windows控制檯程序,是否有可能在程序運行時檢索該程序的標準輸出?如果不是,重寫該程序的最佳方法是什麼?我知道我可以輸出到文件並不斷檢查這些文件的更新。有另一種方法嗎?有沒有更好的辦法?在程序運行時可以獲取程序的輸出嗎?

+0

檢索到哪裏?進入另一個程序或日誌文件? – zebrabox

+0

進入另一個程序 – blindley

+0

而且其他程序也是用C++編寫的? – zebrabox

回答

1

如果它是一個現成的控制檯可執行 可以八方通重定向它的輸出在這樣的文件:

C:>呼應一些文本>文件

C:>程序>文件

如果你是這個意思? 由於你的問題不完全清楚。

\\到另一個程序

哦,好吧
但我的第一個答案也習慣了。 由於還有另一種可能性,例如:

c:> program1 |程序2

它使控制檯程序之間的「管道」
程序2接收它標準輸入什麼程序1拋出到標準輸出,在控制檯程序
其常見的老年Unix的方式實踐。
以這種方式,不需要重寫程序來專門支持它。

1

是的,如果你自己啓動程序:

in CreateProcess,你傳遞一個STARTUPINFO,你可以在其中指定SDIN,STDOUT和STDERR的句柄。請注意,一旦您指定STARTF_USESTDHANDLES標誌,oyu需要提供全部三個。

此外,手柄需要被繼承(否則,子進程無法訪問它們),所以基本上SECURITY_ATTRIBUTES需要看至少是這樣的:

SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; 

你可以打開的句柄到磁盤包含輸入和接收輸出的文件。或者,這可以是Pipes,可以在控制檯應用程序運行時以增量方式讀取/寫入。

0

如果你只在程序的stdout興趣,POPEN()使這很簡單:

FILE* program_output = popen("command line to start the other program"); 
//read from program_output as you would read a "normal" file 
//... 
pclose(program_output); 
0

你最有可能需要使用管道來實現這一點,因爲你使用的是Windows,這裏有一個鏈接到MSDN article與一個例子,似乎正是你想要的。

相關問題