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;
あなたが正しいです、lsコマンドが実行されました。問題文が正しく理解できれば、コマンドが失敗したかどうかを判断したいと思う。この場合、コマンドによって返される「エラーコード」(終了コード)が必要です。 –
私がしたことは、 'waitpid'の' status'値を見ていました。私は0ではない値が無効であることを発見しました。これを処理するためにブール値のフラグを作成しました。これは有効ですか? – ecain