时间:2010-10-19 17:30:45

标签: c linux

这是我找到的kbhit实现,但由于某种原因,它只是等待按下一个键而不是返回除0之外的一些结果。它实际上不起作为kbhit ......

int kbhit(void)
{
    struct timeval tv;
    fd_set read_fd;

    tv.tv_sec=0;
    tv.tv_usec=0;
    FD_ZERO(&read_fd);
    FD_SET(0,&read_fd);

    if(select(1, &read_fd, NULL, NULL, &tv) == -1)
        return 0;

    if(FD_ISSET(0,&read_fd))
        return 1;

    return 0;
}

任何人都可以解释我的问题是什么吗? 我正在使用Linux,顺便说一句。

我认为你可能误解了我,并认为它在击键后实际上会返回非零值。 我的问题是kbhit总是等待击键。

1 个答案:

答案 0 :(得分:0)

stdin可能是行缓冲的。在尝试检测按键时,您需要将其切换为无缓冲。