명령을 실행할 수 없을 때마다 "이진 실행 오류 : -nameOfBinary-"라는 셸을 만들려고합니다. 그러나 그 문제는 항상 "No such file or directory"라는 메시지를 나에게줍니다. 을 Heres의 내 코드의 일부 : 코드와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을 반환한다는 것을 알게되었습니다. 그래서 나는 조건을 넣는다. (execvp (argv [0], argv) == - 1) printf ("이진 실행 오류 : % s", argv [0]); –
리턴 코드 형태를'exec *()'함수로 확인할 필요가 없습니다. 함수의'exec *()'패밀리 중 하나가 반환되면 실패한 것이므로 조건이 필요하지 않습니다. 단순히 오류를보고하십시오. 에러 메시지는'stdout'이 아니라'stderr'에 쓰여진다는 것을 기억하십시오. 이것이 바로 표준 에러 스트림입니다. –