我有一個調用另外一個C程序,就像如何捕獲輸出?
system("path/program2 path/file.txt");
使程序可以處理指令文件。該程序提供了我想在我的C程序中使用的信息,但我沒有「program2」的源,因此我無法編輯它。
目前我正在編寫一個文件(我可以選擇在控制檯上顯示信息或寫入文件之間進行選擇),然後在我的C程序中打開文件然後閱讀,但我想也許這是可能的使它更好,但我真的生鏽的C ...
任何人都可以提供一些想法和/或建議嗎?
謝謝!
編輯
你們有些人建議,我看着fork()
,exec()
和dup2()
功能,我想我有一個更好的方法現在信息共享。
所以,到現在爲止我有這樣的:
- 程序1,使
system()
調用運行program2
- 程序2創建一個臨時文件
temp.txt
和寫入信息 - 回到程序1,它會打開
temp.txt
,讀,操縱信息。
這使得2個開放式的和2個接近的現在
,與theese功能,我可以做
- 程序1,使開放的處理程序,以
temp.txt
- 程序1,使
fork()
自身複製 - on program1.child,調用
dup2()
函數將標準輸入重定向到temp.txt
在program1.child一個
- 被調用運行
program2
- 程序2,使工作和顯示的所有信息(將被重定向到
temp.txt
- 而這一切,program1.father將
wait()
直到program1.child結束 - 上月底,program.father將讀取文件內容,並使用數據
exec()
功能
我覺得這個過程可能是有效的,但我仍然有一個缺陷 - 使用文件。
我想要這個程序在服務器上運行,所以我認爲使用文件可能會令人困惑,甚至是危險的...但仍然這種方法比我使用的方式更好,直到我找到更好的東西我敢打賭我可以設法管理服務器端的文件創建...
所以,是「新」的程序是否有效?
最後編輯:
所以,用popen()
所有的問題就解決了。
FILE *in;
extern FILE *popen();
char buff[512];
if(!(in = popen("path/program2 path/file.txt", "r"))){
//error;
}
while(fgets(buff, sizeof(buff), in) != NULL){
printf("%s", buff);
}
pclose(in);
(從sw-at.com提取)
謝謝大家的幫助!今天我學到了一些東西!
請勿使用'system'。創建一個新的進程來執行'program2',並設置它的'stdout'來管道你的'program1'。 – StoryTeller
我只是谷歌它...你的意思是fork()函數? –
如果你在POSIX系統上,那麼是的。如果沒有,請參閱您的操作系統的開發者文檔。 – StoryTeller