Linux通过读取设备文件监听键盘

#include <stdio.h>
#include <linux/input.h>
#include <fcntl.h>
#include <unistd.h>

#define DEV_PATH "/dev/input/event5"   //根据需要修改为你的键盘对应的设备文件,可以直接sudo cat /dev/input/event5并按键盘,看是否有输出,见附图

int main()
{
    int keys_fd;  //文件标志
    char ret[2];
    struct input_event t;  //读取到的input设备数据是一个结构体
    
    keys_fd = open(DEV_PATH, O_RDONLY);  //权限不通过的时候一般会返回-1
    if(keys_fd <= 0)
    {
        printf("open /dev/input/event2 device error!\n");
        return -1;
    }
    while(1)
    {
        if(
            read(keys_fd, &t, sizeof(t)) == sizeof(t)
            )  /*keys_fd指向打开的设备文件,read将从设备文件传送sizeof(t)个字节的数据到&t这个内存地址。函数执行顺利的话返回值是实际读取的字节数*/
        {
            if(t.type == EV_KEY)
            {
                if(t.value==0 || t.value==1)
                {
                    printf("key %d %s\n", t.code, (t.value) ? "Pressed" : "Released");  //t.code值所对应的按键在/usr/include/linux/input-event-codes.h可以查到  
                }
            }
        }
    }
    close(keys_fd);
    
    return 0;
}

附图

操作其他的设备类似,不过要提前了解相关的数据结构
但是这种监听是需要有设备文件的读取权限的(默认root用户才有),read函数是系统函数,阻塞地读取设备文件,当设备文件中的缓存为空时挂起等待。
推荐Linux全局事件监听技术

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 在开发项目中不免会遇到下载文件的需求,如果正好使用的是Retrofit网络框架又不想使用其它网络框架或者手写...
    x小明阅读 2,772评论 0赞 8
  • 1 Linux 文件系统 1.1 Linux 文件系统与设备驱动关系 下图表明了 Linux 中虚拟文件系统、磁盘...
    守拙圆阅读 5,727评论 0赞 3
  • 我是黄平,一个有着十年工龄的下岗女工。之后便自主创业开小卖部,做啤酒代理,开餐馆,直到现在从事的买建筑用的木方模板...
    黄平果九数解读师阅读 235评论 0赞 0
  • 我从小在贫穷落后的村庄长大,农村家的孩子,虽然说没有什么游乐园,但是在哪里都可以自由自在的玩游戏,这就是穷苦孩子的...
    杨志生阅读 221评论 0赞 0
  • 现在是2018年1月26日,十年后,自己已经长发成人,离开了父母的怀抱,过着属于自己的生活。我会是什么样子…… 这...
    HEARTBEA阅读 241评论 0赞 0

友情链接更多精彩内容