아래는 내 C 코드입니다. 첫 번째 입력은 아름답게 작동하지만 두 번째 입력은 무한 루프를 발생시킵니다. 버퍼를 플러시했습니다.이 문제를 해결할 방법이 없습니다. fgets
위두 번째 입력 char * 무한 루프를 만듭니다
#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;
}
기술적으로 입력 스트림에서'fflush'를 사용하는 것은 정의되지 않은 동작입니다. –
문제에 관해서는 디버거에서 한 줄씩 코드를 시도해 볼 수 있습니다. 도움이 될 수도 있습니다. –
위의 fgets를 사용하십시오 –