В настоящее время, когда я нахожусь ctrl+d
, он продолжает печатать > ERROR
снова и снова, пока я не приостановил программу (ctrl+z
). Я пробовал различные способы исправить это, но он разрывает программу другими способами.Программа не останавливается на EOF
int main()
{
char *command;
char **parameters;
int status;
size_t buffsize = 0;
while(1)
{
command = NULL;
printf("> ");
getline(&command, &buffsize, stdin);
command[strlen(command)-1] = '\0';
parameters = tokenize(command);
if (!strcmp(command, "exit"))
{
exit(1);
}
if (fork() != 0)
{
waitpid(-1, &status, 0);
}
else
{
status = execvp(command, parameters);
if (status == -1)
{
printf("ERROR\n");
exit(1);
}
}
free(command);
}
return 0;
}
EDIT: Вот исправление. Спасибо jil
if(getline(&command, &buffsize, stdin)) == -1) {
return 0;
}
На каком этапе делает программу проверить EOF? – user3386109
Я попытался добавить 'if (command == EOF) 'или' command == 0)' 'return 0', но он все равно не работает. – noname
Что делает функция tokenize()? Если вызов не изменяет строчную команду, вы передаете полную команду в качестве первого аргумента execvp, где вы должны передавать путь к исполняемому файлу. – odelande