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

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

相关推荐
red_redemption1 小时前
自由学习记录(175)
学习
ZhiqianXia2 小时前
《The Design of Design》阅读笔记
前端·笔记·microsoft
nashane2 小时前
HarmonyOS 6学习:画中画(PiP)状态同步与场景化实战指南
学习·pip·harmonyos·harmonyos 5
祁白_3 小时前
nmap工具笔记整理
笔记·web安全·测试
_李小白3 小时前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习
勤劳的进取家3 小时前
数据链路层基础
网络·学习·算法
南境十里·墨染春水3 小时前
C++笔记 STL——set
开发语言·c++·笔记
d111111111d3 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
LZYmarks3 小时前
小白买车笔记
笔记
码途漫谈3 小时前
Easy-Vibe开发篇阅读笔记(二)——前端开发之Figma与MasterGo入门
人工智能·笔记·ai·开源·ai编程·figma