Linux学习笔记--查询_唤醒方式读取输入数据

头文件和变量

复制代码
#include <string.h>    // 字符串操作
#include <unistd.h>    // read() 函数

struct input_event event;  // 输入事件结构体

非阻塞模式支持

复制代码
if (argc == 3 && !strcmp(argv[2], "noblock")) {
    fd = open(argv[1], O_RDWR | O_NONBLOCK);
} else {
    fd = open(argv[1], O_RDWR);
}
  • 如果命令行第三个参数是 "noblock",则以非阻塞模式打开设备

  • O_NONBLOCK 标志使得 read 操作不会阻塞程序

实时事件读取循环

复制代码
while (1) {
    len = read(fd, &event, sizeof(event));
    if (len == sizeof(event)) {
        printf("get event: type = 0x%x, code = 0x%x, value = 0x%x\n", 
               event.type, event.code, event.value);
    } else {
        printf("read err %d\n", len);
    }
}

struct input_event 结构体

linux/input.h 中定义:

复制代码
struct input_event {
    struct timeval time;  // 时间戳
    __u16 type;           // 事件类型
    __u16 code;           // 事件代码
    __s32 value;          // 事件值
};

事件类型详解

EV_SYN (0x00) - 同步事件
  • 用于标记一组事件的结束

  • 代码通常为 SYN_REPORT (0)

  • 值通常为 0

EV_KEY (0x01) - 按键事件
  • 代码:按键编号(如 KEY_A, KEY_ENTER

  • 值:

    • 0:按键释放

    • 1:按键按下

    • 2:按键长按

EV_REL (0x02) - 相对坐标事件
  • 代码:REL_X, REL_Y, REL_WHEEL

  • 值:相对移动量

EV_ABS (0x03) - 绝对坐标事件
  • 代码:ABS_X, ABS_Y, ABS_PRESSURE

  • 值:绝对坐标值

阻塞模式(默认)

复制代码
./01_get_input_info /dev/input/event0

程序会阻塞在 read() 调用,直到有输入事件发生。

非阻塞模式

./01_get_input_info /dev/input/event0 noblock

程序会立即返回,如果没有事件则显示错误信息。

相关推荐
Galloping-Vijay4 小时前
Claude Code 使用笔记
笔记
旖旎夜光4 小时前
多态(11)(下)
c++·学习
极市平台5 小时前
骁龙大赛-技术分享第5期(上)
人工智能·经验分享·笔记·后端·个人开发
全栈陈序员5 小时前
【Python】基础语法入门(十七)——文件操作与数据持久化:安全读写本地数据
开发语言·人工智能·python·学习
啄缘之间6 小时前
11. UVM Test [uvm_test]
经验分享·笔记·学习·uvm·总结
RisunJan6 小时前
【行测】类比推理-自称他称全同
学习
wan55cn@126.com6 小时前
人类文明可通过技术手段(如加强航天器防护、改进电网设计)缓解地球两极反转带来的影响
人工智能·笔记·搜索引擎·百度·微信
石像鬼₧魂石6 小时前
Termux ↔ Windows 靶机 反向连接实操命令清单
linux·windows·学习
非凡ghost6 小时前
JRiver Media Center(媒体管理软件)
android·学习·智能手机·媒体·软件需求
会飞的土拨鼠呀6 小时前
docker部署 outline(栗子云笔记)
笔记·docker·容器