2011-03-19 147 views
0

如何從流中將錯誤消息的文本轉換爲變量?獲取錯誤消息

例如

void * thread_func(void) { 
    char args[]={"firefox","ax",NULL}; 
    pid_t child_pid = fork(); 
    if(child_pid!=0) { 
    cout<<"error"; 
    } else { 
    execvp("firefox",args); /*something should be done here to get the message*/ 
    } 
    return 0; 
} 
+4

什麼錯誤?什麼信息?什麼流?什麼變量? – ereOn 2011-03-19 13:03:16

+0

請發佈代碼,你必須顯示你想要的是什麼。 – Mat 2011-03-19 13:03:33

+0

例如void * thread_func(void) {char _ args [] = {「firefox」,「ax」,NULL}; pid_t child_pid = fork(); (child_pid!= 0) if(child_pid!= 0) cout <<「error」;其他 execvp(「firefox」,args); /*這裏應該做些什麼來獲得消息*/ } return 0; } – Hayk 2011-03-19 13:21:16

回答

0

你是詢問像perror()

+0

例如我正在linux中創建一個進程,如果它沒有創建,應該在終端中有一條消息,我需要該消息的文本。 – Hayk 2011-03-19 13:18:56

+0

perror將打印出來,但我認爲fizzer有正確的想法來存儲它。 – jonsca 2011-03-19 13:23:52

1

使用字符串錯誤()來得到一個錯誤號的字符串。在打電話之前將errno設置爲0,然後再進行測試。這樣可以避免像臭名昭着的「不是打字機」這樣的令人尷尬的信息,而是來自像printf這樣可以設置errno的良性呼叫。

#include <cerrno> 
#include <cmath> 
#include <cstring> 
#include <string> 
#include <iostream> 
#include <ostream> 
using namespace std; 

int main() 
{ 
    errno = 0; 
    sqrt(-1.0); 
    if (errno != 0) { 
     string s = strerror(errno); 
     cout << s << endl; 
    } 
} 
+2

很難說出你在問什麼,儘管 – fizzer 2011-03-19 13:13:17

+0

exec和朋友在失敗時設置了errno,所以這對你很有用。 – fizzer 2011-03-19 14:02:31