2016-11-02 33 views
1

我試圖在我正在創建的bash shell中實現||,&&;運算符。我試圖做的是使用int作爲標誌,如果成功則設置爲1,否則設置爲0。我的問題是,即使我進入一個無效的操作,比如ls -apples它設置標誌爲1。我也得到了錯誤信息在C++中實現shell的bash運算符

LS:無效選項 - 「E」 嘗試「LS --help」欲瞭解更多信息

所以我認爲這意味着它在技術上是執行? 如何跟蹤execvp是否進行了無效操作? 這裏是我的代碼:

pid_t pid; 
    pid_t waitId; 
    int status; 
    //forks into two processes 
    pid = fork(); 
    //There was an error during fork 
    if (pid < 0) 
    { 
     successFlag = 0; 
     perror("There was an error"); 
    } 
    else if (pid == 0) 
    { 
     //must be cast because our function expects a char *const argv[] 
     if (execvp(command[0], (char**)command) < 0) 
     { 
      //error at execvp 
      successFlag = 0; 
      perror("There was an error executing the process"); 
     } 
      exit(EXIT_FAILURE); 
    } 

    else 
    { 
     do 
     { 
      waitId = waitpid(pid, &status, WUNTRACED | WCONTINUED); 
      if(waitId == -1){ 
       successFlag = 0; 
       perror("Error in parent process"); 
       exit(EXIT_FAILURE); 
      } 

     } 

     while (!WIFEXITED(status) && !WIFSIGNALED(status)); 
    } 
    //use this flag to determine whether the process was a success 
    successFlag = 1; 
+0

你是對的,ls命令跑了。如果我正確理解你的問題陳述,你想確定命令是否發送失敗。在這種情況下,您希望命令返回的「錯誤代碼」(退出代碼)。 –

+0

我做了什麼,看看'waitpid'的'status'值。我發現任何不是0的值都是無效的。我做了一個布爾標誌來處理這個。這有效嗎? – ecain

回答

0

解決的辦法是看那個status返回數字。標誌會告訴你它是否成功。