目前,当我点击ctrl+d
时,它会一遍又一遍地打印> ERROR
,直到我暂停程序(ctrl+z
)。我已经尝试了各种方法来解决这个问题,但它以其他方式打破了程序。
int main()
{
char *command;
char **parameters;
int status;
size_t buffsize = 0;
while(1)
{
command = NULL;
printf("> ");
getline(&command, &buffsize, stdin);
command[strlen(command)-1] = '\0';
parameters = tokenize(command);
if (!strcmp(command, "exit"))
{
exit(1);
}
if (fork() != 0)
{
waitpid(-1, &status, 0);
}
else
{
status = execvp(command, parameters);
if (status == -1)
{
printf("ERROR\n");
exit(1);
}
}
free(command);
}
return 0;
}
编辑:这是修复。谢谢你jil
if(getline(&command, &buffsize, stdin)) == -1) {
return 0;
}
答案 0 :(得分:6)
也许您应该检查EOF然后采取相应行动。 man getline
说:
在读取一行失败时返回-1(包括文件结束条件)
所以尝试类似:
if (getline(&command, &buffsize, stdin) == -1)
return 0;