2013-03-06 55 views
1

我想從C++運行另一個程序,將其輸出重定向到一個文件並返回結果代碼。 但是,如果我無法運行程序(不正確的路徑等),我想知道。用C++運行一個進程,過濾輸出並得到結果代碼並得到系統錯誤,一起

這是我的問題,我該如何:重定向文件,獲取程序的結果代碼,一次獲取系統的錯誤?

  • System():返回結果,很容易重定向,但沒有辦法知道,如果結果是一個系統錯誤或應用程序的結果
  • posix_spawn():我知道,如果有一個系統錯誤,但如何獲得應用程序結果代碼?

請注意,我不與Windows控制執行的應用 的代碼很容易(對不起...)OpenProcess()功能,我需要的是linux下OpenProcess()

感謝

+0

感謝伯尼和喬丹爲你糾正我的問題:) – syp 2013-03-06 23:19:37

回答

0

您將需要使用posix_spawn功能。

waitpid系統調用將幫助您獲取退出代碼。

請參閱this question

pid_t waitpid(pid_t pid, int *status, int options); 
0

你需要做的是相當匹配的標準叉exec調用以及文件重定向:

int pid = fork(); 
if(pid == -1) { 
    // process error here 
} 

if(pid == 0) { 
    int fd = open("path/to/redirected/output", ...); 
    ::close(1); 
    dup2(fd, 1); 
    ::close(fd); 
    exec...("path to executable", ...); 
    // if we are here there is a problem 
    exit(123); 
} 
int status = 0; 
waitpid(pid, &status, 0); 
// you get exit status in status 

執委會......我的意思是exec函數族的一個(輸入「man 3 EXEC 「以獲取信息),選擇一種更適合你的產品。 如果您需要重定向錯誤輸出,請執行相同的操作,但使用描述符2.您可能希望將waitpid()放入循環中,並檢查它是否未被信號中斷。

+0

太棒了! waitpid是我需要的功能,謝謝 - 我用Windows更舒適,錯過了一些Linux基礎知識;) – syp 2013-03-06 23:12:19

相關問題