Я пишу свою собственную оболочку на C, и мне нужно обнаружить EOF (когда я запускаю ./myshell < commands.txt
)
commands.txt содержит:
ls
pwd
Оба они работают нормально отдельно из программы. Но когда я запускаю его с текстовым файлом, я получаю бесконечный цикл.
В моем цикле while(1)
для оболочки первое, что я делаю, это:
if (feof(stdin)) { my_exit(); }
my_exit
это просто:
void my_exit() {
printf("End of file! Bye\n");
exit(0);
}
Разве exit(0)
не завершает программу (и цикл)? Почему я получаю
Конец файла! Пока Конец файла! Пока Конец файла! Пока Конец файла! Пока Конец файла! Пока Конец файла! До свидания.... и т.д.
Я также пробовал делать fgets == NULL
. Тот же цикл
exit(0)
обязательно должен выйти из процесса. Покажите нам еще немного кода. - person Keith Randall   schedule 22.09.2012feof()
иferror()
предназначены для выяснения причины сбоя операции ввода. Если есть ошибка ввода,ferror()
вернет true, аfeof()
вернет false, что может привести к бесконечному циклу. - person Keith Thompson   schedule 22.09.2012