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

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

相关推荐
咬_咬3 分钟前
go语言学习(基本数据类型)
开发语言·学习·golang·数据类型
独小乐11 分钟前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
山甫aa13 分钟前
List 容器 -----C++的stl学习
开发语言·c++·学习
无聊大侠hello world18 分钟前
Yu-AI-Agent 项目(AI 恋爱大师智能体) · 学习笔记
人工智能·笔记·学习
AI_零食23 分钟前
Flutter 框架跨平台鸿蒙开发 - 孤独指数应用
学习·flutter·开源·harmonyos
CheerWWW35 分钟前
C++学习笔记——箭头运算符、std::vector的使用、静态链接、动态链接
c++·笔记·学习
ZhiqianXia1 小时前
Pytorch 学习笔记(17):decompositions.py —— 算子分解的百科全书
pytorch·笔记·学习
xian_wwq1 小时前
【学习笔记】大模型如何理解图片
笔记·学习
talen_hx2961 小时前
《零基础入门Spark》学习笔记 Day 13
笔记·学习·spark
Flittly1 小时前
【SpringAIAlibaba新手村系列】(15)MCP Client 调用本地服务
java·笔记·spring·ai·springboot