c++ - C select() 超时 STDIN 单字符(无 ENTER)

标签 c++ c sockets stdin nonblocking

我希望能够使用 select() 从 STDIN 输入单个字符(无 ENTER)。

因此,当用户按下单个键时,select() 应该立即返回,而不是等待用户按下 ENTER。

int main(void)
{
    fd_set rfds;
    struct timeval tv;
    int retval;

   /* Watch stdin (fd 0) to see when it has input. */
    FD_ZERO(&rfds);
    FD_SET(0, &rfds);

   /* Wait up to 2 seconds. */
    tv.tv_sec = 2;
    tv.tv_usec = 0;

   retval = select(1, &rfds, NULL, NULL, &tv);

   if (retval == -1)
        perror("select()");
    else if (retval)
        printf("Data is available now.\n");
    else
        printf("No data within five seconds.\n");

   exit(EXIT_SUCCESS);
}

这可行,但您必须按 ENTER 键才能完成。我只希望选择不等待用户按下键和 ENTER。

谢谢。

最佳答案

我相信,当一个键被输入到终端时,它会被缓冲直到你按下 ENTER,也就是说,就程序而言,你没有输入任何东西。您可能想快速浏览一下 this question .

关于c++ - C select() 超时 STDIN 单字符(无 ENTER),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8514990/

相关文章:

c++ - 使用 CRTP 模式时继承的模糊方法

c - 从集合中查找最接近查询数字的两个不同数字的总和

c - 如果我们要从目录中添加.EXE文件扩展名,该添加什么代码?

c - 是否可以在不发送 RST 的情况下中止关闭套接字?

c++ - 如何在 C++ 中测试条件变量?

c++ - 多线程程序中映射模式的性能低于预期(4 倍加速比 8 倍)

c++ - block 内存的简单自定义分配器?

c - 不断得到预期 'const char *'

c# - 有没有办法像在套接字中一样从 TcpClient 获取远程 IP 端点?

java - 如何使用线程访问相同的数据?