下面是我的C代码。第一个输入效果很好,但第二个输入会导致无限循环。我已经刷新了缓冲区,但我不知道如何解决这个问题。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#define MAXARG 7
int main()
{
char buf[256];
char* arg[MAXARG];
char* s;
char* save;
int argv;
static const char delim[] = " \t\n";
int pid, status;
while(1){
printf("MyShell: ");
fgets(buf, sizeof(buf), stdin);
fflush(stdin);
argv = 0;
s = strtok_r(buf, delim, &save);
while(s){
arg[argv++] = s;
s= strtok_r(NULL, delim, &save);
}
arg[argv] = (char*) 0;
if(!strcmp(arg[0], "quit"))
break;
if((pid = fork()) == -1)
perror("fork failed...");
else if(pid != 0){
pid = wait(&status);
}
else{
execvp(arg[0], arg);
}
}
return 0;
}
发布于 2013-04-10 20:52:32
在fgets
上使用fflush
..在输入消息之前,您需要刷新stdin
。
您可以在linux
中使用stdio_ext标头中的__fpurge
。
发布于 2013-04-10 20:55:39
这个问题是,你调用fgets()
,然后调用fflush()
并做你的工作……然后循环遍历while
并再次调用fgets()
...但是你没有测试来自fgets()
的EOF
,我几乎可以保证你会得到它。现在,您的while
循环正在无休止地循环,等待fgets()
返回EOF
以外的其他内容
https://stackoverflow.com/questions/15926152
复制相似问题