以非阻塞方式在Linux中读取原始输入

时间:2013-08-30 20:05:20

标签: c++ linux nonblocking

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

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

但是,我在C ++和Linux下的非阻塞编程方面不是很有经验,我认为每个设备的线程可能都是一种过度杀伤。

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

谢谢,skwee。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

Non-blocking call for reading descriptor