У меня возникли проблемы с базовой программой оболочки, которую я пытаюсь написать на языке c.Всякий раз, когда я пытаюсь вызвать exec в функции, такой как ls , execvp будет возвращаться с ошибкой, сообщающей, что файл или каталог не найден.Я думаю, что проблема в синтаксическом анализе, потому что в основном команда может быть напечатана, но в функции она пуста.Спасибо
Вот код для функции:
int extern_process(char *arg[]){
pid_t pid;
int errnum, ifFail;
printf("i%si\n",arg[0]);
pid = fork();
if(pid == -1){
errnum = errno;
fprintf(stderr,"Error: fork %s", strerror(errnum));
return FAIL;
} else if(pid == 0){
ifFail = execvp(arg[0],arg);
if(ifFail < 0){
errnum = errno;
fprintf(stderr,"Error: exec %s", strerror(errnum));
return FAIL;
}
} else {
pid = wait(NULL);
}
return SUCCESS;
}
Вот код для функции анализа на всякий случай:
void parse_cmd(char *retval[], char *cmd){
char *tmp;
char a[100];
strcpy(a,cmd);
int i = 0;
tmp = strtok(a," \n\t\0");
if(retval == NULL){
fprintf(stderr, "Error with allocation\n");
return;
}
if(tmp == NULL){
printf("Error with parsing.\n");
return;
}
while(tmp != NULL){
retval[i] = tmp;
tmp = strtok(NULL," \n\t\0");
i++;
}
retval[i] = NULL;
}
Вот вывод:
shell> ls
ls
i i
Error: exec no file or directory found