コマンドを実行できないときはいつでも、「バイナリを実行するとエラー:-nameOfBinary-」というシェルを作ろうとしています。しかし、それは常に私に "No such file or directory"というメッセージを与えるということです。 相続人の私のコードの一部:コード付きC - "No such file or directory"というメッセージを置き換えます。
void handle_SIGINT() {
write(STDOUT_FILENO,line,strlen(line));
printf("\n");
struct sigaction handler;
handler.sa_handler = handle_SIGINT;
sigaction(SIGINT, &handler, NULL);
}
void runcommand(char* argv[]) {
int p =fork();
if(p==0) {
struct sigaction handler;
handler.sa_handler = SIG_IGN;
sigaction(SIGINT, &handler, NULL);
execvp(argv[0],argv);
perror("Error executing binary");
exit(1);
} else {
wait(NULL);
}
}
それは常にそれをある私にメッセージ「エラーバイナリ実行していない:そのようなファイルやディレクトリ」を与えるように私が望むものに近いです! どうすれば修正できますか? ありがとうございます!
私は実際にそれを少し前に理解しました! –
それは私が想像したよりも実際には簡単です。 execvp()関数は、実行に失敗したときに-1を返します。したがって、if(execvp(argv [0]、argv)== -1)printf( "バイナリを実行中のエラー:%s"、argv [0]); –
'exec *()'関数から戻りコードをチェックする必要はありません。関数の 'exec *()'ファミリのいずれかが返ってきた場合は失敗したため、条件は必要ないのでエラーを報告してください。エラーメッセージは 'stdout'ではなく' stderr'に書き込まれることを覚えておいてください。これが標準エラーストリームです。 –