【问题标题】:Read raw input in Linux in non blocking way在 Linux 中以非阻塞方式读取原始输入
【发布时间】:2013-09-03 15:23:50
【问题描述】:

我正在研究 Linux 内核,尤其是输入子系统。我有兴趣阅读 /dev/input/eventX 设备以获取不同的输入事件(主要是键盘和鼠标)。

但是read() 操作会阻塞。我唯一能想到的是创建所有键盘键和鼠标按钮的状态,然后创建一个新线程来读取键盘和鼠标状态(这些线程可能不时被阻塞),并从我的主进程中,访问键盘和鼠标的状态。

但是,我在 C++ 和 Linux 下的非阻塞编程方面不是很有经验,我认为每个设备的线程可能有点过头了。

我想知道是否有其他方法可以以非阻塞方式处理输入,或者使用线程可以吗?

谢谢,skwee。

【问题讨论】:

    标签: c++ linux nonblocking


    【解决方案1】:

    您可以将文件描述设置为非阻塞。您还可以使用 select/poll 来检查是否有数据可供读取,在这种情况下您不需要非阻塞。看这个帖子;

    Non-blocking call for reading descriptor

    【讨论】:

      【解决方案2】:

      您可以查看 poll 系统调用。用于处理多个文件描述符上的 I/O。一种可能性是只生成一个线程来轮询多个文件描述符上的事件。

      这里是一些阅读材料:http://www.makelinux.net/ldd3/chp-6-sect-3

      【讨论】:

        猜你喜欢
        • 2010-11-19
        • 1970-01-01
        • 2014-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        相关资源
        最近更新 更多