下面是我的 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;
}