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

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

相关推荐
Bruce_Liuxiaowei26 分钟前
从基础理论开始学习人工智能(三):盲目搜索——从状态空间图到生成-测试范式
人工智能·学习
有梦想的骇客1 小时前
PyTorch学习笔记
pytorch·笔记·学习
Capricorn19881 小时前
个人知识库接入大模型频现“幻觉引用”?排查 RAG 溯源失效问题,解析知芽构建可信第三大脑的底层架构
大数据·论文阅读·人工智能·笔记·架构·论文笔记
陈年老古董2 小时前
深度学习入门笔记:从神经元到深度神经网络
人工智能·笔记·深度学习·神经网络·学习
2601_967100423 小时前
护眼灯哪个牌子更好更专业耐用?专业长效护眼台灯品牌推荐,品质过硬
学习·护眼·台灯
疯狂打码的少年3 小时前
【数据库技术】关系完整性约束(实体/参照/用户定义)
运维·服务器·数据库·笔记
微露清风3 小时前
快慢指针算法学习记录
学习·算法·快慢指针
sunshine22 girl4 小时前
Angular7,9,学习笔记四 父子组件传值,组件之间传值
笔记·学习
蒸蒸yyyyzwd5 小时前
cpp选手秋招学习笔记 day18
笔记·学习
HugoStudio_SWAN5 小时前
C++ CMD 互动动画:按键触发爆炸效果
开发语言·c++·学习·程序人生