【发布时间】:2012-09-14 11:10:24
【问题描述】:
我正在用 C 编写自己的 shell,我需要检测 EOF(当我运行 ./myshell < commands.txt 时)
commands.txt 包含:
ls
pwd
它们都可以在程序中单独运行。但是当我用文本文件运行它时,我得到了一个无限循环。
在我的while(1) shell 循环中,我做的第一件事是:
if (feof(stdin)) { my_exit(); }
my_exit 很简单:
void my_exit() {
printf("End of file! Bye\n");
exit(0);
}
exit(0) 不会结束程序(和循环)吗?为什么我会得到
文件结束!文件结束!文件结束!文件结束!文件结束!文件结束!再见....等等
我也尝试过fgets == NULL 的方式。相同的循环
【问题讨论】:
-
是的,
exit(0)绝对应该退出该过程。向我们展示更多代码。 -
如果不查看更多代码很难判断,但您应该通过检查您正在使用的任何输入函数返回的值来检测文件结束。
feof()和ferror()用于找出输入操作失败的原因。如果输入错误,ferror()将返回 true,feof()将返回 false,这可能会导致无限循环。 -
我已经添加了我的其余代码 - 我还尝试使用 fgets == NULL 进行此检测,仍然导致无限循环,没有退出。奇怪的是,它打印出退出文本......所以它正在点击那个函数,但 exit(0) 并没有结束程序。
标签: c while-loop infinite-loop eof