c - 程序没有在 EOF 处停止

标签 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;
}

编辑:这是修复方法。谢谢吉尔

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

最佳答案

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

return -1 on failure to read a line (including end-of-file condition)

所以尝试这样的事情:

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

关于c - 程序没有在 EOF 处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37756715/

相关文章:

c - 为什么发布版本中的 assert(0) 不是未定义的行为?

c - 从结构中输出字符串

C:从生产代码中删除断言

C++ 试图在到达 EOF 时读取一个字符

c - 这有可能使用某种位魔术来实现吗?

c++ - 文件结束无限while循环

c - 为什么我不能使用 fseek() 访问 EOF?

c - 如何用 C 编写输入整数文件结尾的代码

java - 保存互联网图标然后重新打开会导致 image4j 出现 EOF

c - DHT11传感器连接ESP8266时保持打印255温湿度