1
我試圖做一個shell,只要它不能執行命令它說「執行二進制錯誤:-nameOfBinary-」。但問題是,它總是給我「沒有這樣的文件或目錄」的消息。我的代碼 繼承人部分:C - 替換「沒有這樣的文件或目錄」消息
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 *()'函數系列返回,那是因爲它失敗了,所以條件不是必需的 - 只需報告錯誤。請記住,將錯誤消息寫入'stderr',而不是'stdout' - 這就是爲什麼它是標準錯誤流。 –