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

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

相关推荐
通信小呆呆23 分钟前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick44 分钟前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee1 小时前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn862 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e2 小时前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨2 小时前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
闪闪发亮的小星星2 小时前
高斯光以及高斯光公式解释
笔记
cqbzcsq3 小时前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan4 小时前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
阿米亚波4 小时前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm