程序不会停止在EOF上

时间:2016-06-10 20:29:09

标签: c eof

目前,当我点击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;
}

1 个答案:

答案 0 :(得分:6)

也许您应该检查EOF然后采取相应行动。 man getline说:

  

在读取一行失败时返回-1(包括文件结束条件)

所以尝试类似:

if (getline(&command, &buffsize, stdin) == -1)
    return 0;