当前位置: 首页 > news >正文

读取按键的四种方式

  1. 查询方式:非阻塞
    • 在app调用open的时候,使用O_RDWR|O_NONBLOCK
  2. 阻塞方式
    • 在app调用open的时候,使用O_RDWR,不传入O_NONBLOCK,
    • 当驱动程序有数据时,read函数就会返回数据
    • 负责APP将在内核态休眠,直至有数据时被内核态唤醒
  3. poll 方式

    pfd.fd = fd;        // 之前打开的文件描述符pfd.events = POLLIN; // 关注可读时间pfd.revents = 0;while (1){ret = poll(&pfd,nfds,5000); //5秒超市if(ret > 0){if(pfd.events == POLLIN){while((read(fd,&event,sizeof(event)) == sizeof(event))){printf("Event: type=%d code=%d value=%d\n", event.type, event.code, event.value);}}}else if( ret == 0){printf("time out \n");}}
  1. 异步通知(select)
    void my_signal_cb(int num)
    {struct input_event event;while((read(fd,&event,sizeof(event))== sizeof(event))){printf("Event: type=%d code=%d value=%d\n", event.type, event.code, event.value);}
    }/*注册信号处理函数*/
    signal(SIGIO, my_signal_cb);fd = open(argv[1], O_RDWR | O_NONBLOCK); // 以非阻塞式读取
    if (fd < 0)
    {printf("open %s err\n", argv[1]);return -1;
    }/*把APP的进程号告诉给驱动程序*/
    //作用:设置文件描述符 fd 的拥有者(owner)为当前进程。
    //F_SETOWN:命令参数,表示设置文件描述符的拥有者(进程ID或进程组ID)。
    fcntl(fd, F_SETOWN, getpid()); /*使能异步通知*/
    //获取文件描述fd的当前标志位(file status flags)
    //F_GETFL:命令参数,表示获取文件状态标志。
    flags = fcntl(fd, F_GETFL);//flags | FASYNC:在原有的标志位基础上按位或(OR)添加 FASYNC 标志。
    fcntl(fd, F_SETFL, flags | FASYNC);while(1)
    {//干自己想要干的事情就可以了,直到驱动程序有信号来通知他
    }
    
http://www.lryc.cn/news/584348.html

相关文章:

  • Thrust库介绍与使用
  • AI进校园:北京中小学9月起开设AI通识课,每学年不少于8课时
  • 【PTA数据结构 | C语言版】链式栈的3个操作
  • AI 对话实现打字机效果 Vue3 setup
  • SEO算法更新应对:5大实战案例与优化策略
  • 力扣刷题记录(c++)06
  • The 2023 ICPC Asia Hangzhou Regional Contest(G. Snake Move(最短路))
  • Map容器用map优化程序
  • 《一起出发,“春”不“晚”》特别行动踏梦武当,探寻新春奇境
  • 动态规划疑惑总结
  • 爬虫-正则使用
  • 8.2.3希尔排序
  • 【Bluedroid】蓝牙协议栈控制器能力解析与核心功能配置机制(decode_controller_support)
  • 【Nginx】Nginx 安装与 Sticky 模块配置
  • Android 13----在framworks层映射一个物理按键
  • FlashAttention 快速安装指南(避免长时间编译)
  • GoView 低代码数据可视化
  • JAVA JVM对象的实现
  • 机器学习与光子学的融合正重塑光学器件设计范式
  • 统计文件内容:统计一个文本文件中字符、单词、行数。
  • C#中异步任务取消:CancellationToken
  • HOOK专题
  • Linux流量分析:tcpdump wireshark
  • EchoSight-Pro发布说明
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_fin_timeout
  • Android Coil 3 data加载图的Bitmap或ByteArray数据类型,Kotlin
  • 设计总监年中复盘:用Adobe XD内容识别布局,告别“手动调距”
  • 大模型在膀胱癌诊疗全流程预测及应用研究报告
  • HarmonyOS AI辅助编程工具(CodeGenie)UI生成
  • RabbitMQ 高级特性之消息分发