2016-11-02 11 views
1

私は、作成しているbashシェルに||&&、および;の演算子を実装しようとしています。私がしようとしているのは、intをフラグとして使用して、成功した場合は1に設定し、そうでない場合は0に設定します。私の問題は、私はそれが1にフラグを設定するなどls -applesとして無効な操作を入力した場合でも、私はまた、エラーメッセージが出ていることであるシェルのbash演算子をC++で実装する

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リターンを見ていた: はここに私のコードです。サインは、それが成功したかどうかをあなたに伝えます。

関連する問題