在上一篇linux按键中断处理中,我们采用按键中断处理获取按键,在read函数中阻塞读取,当按键发生时,read自动解除阻塞,实现应用层读取到相应的按键值。在上一节中如果没有按键到来,应用层会一直阻塞等待在read 函数中。本博客页尝试使用按键中断加poll和selcet机制的方式这个处理。实现在应用层,阻塞指定的时间,如果没有信息返回,就主动退出阻塞等待。

先贴一段代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <poll.h>/* forthdrvtest */
int main(int argc, char **argv)
{int fd;unsigned char key_val;int ret;struct pollfd fds[1];fd = open("/dev/buttons", O_RDWR);if (fd < 0){printf("can't open!\n");}fds[0].fd     = fd;fds[0].events = POLLIN;while (1){ret = poll(fds, 1, 5000);if (ret == 0){printf("time out\n");}else{read(fd, &key_val, 1);printf("key_val = 0x%x\n", key_val);}}
-----------------------------------我是漂亮的分割线-----------------------------------------------------------------------------------------
return 0;
}

linux中断pollselcet按键处理机制相关推荐

  1. arm Linux 中断管理机制

    关键词:GIC.IAR.EOI.SGI/PPI/SPI.中断映射.中断异常向量.中断上下文.内核中断线程.中断注册. 1.1 ARM支持中断类型 ARM GIC-v2支持三种类型的中断: SGI:软件 ...

  2. (十三)linux中断底半部分处理机制

    这篇文章介绍一下linux中断的底半部分的tasklet和workquene两种处理机制,其中tasklet中不能有延时函数,workquene的处理函数可以加入延时操作 目录 (一)tasklet小 ...

  3. linux 按键驱动中断 rockchip_7.自己写中断方式按键驱动程序(详解)

    request_irq()和free_irq()分析完毕后,接下来开始编写上升沿中断的按键驱动 如下图,需要设置4个按键的EINT0, EINT2, EINT11, EINT19的模式为双边沿,且设置 ...

  4. Linux 中断实验

    目录 Linux 中断简介 Linux 中断API 函数 上半部与下半部 设备树中断信息节点 获取中断号 硬件原理图分析 实验程序编写 修改设备树文件 按键中断驱动程序编写 编写测试APP 运行测试 ...

  5. Linux 中断所有知识点

    目录 Linux 中断管理机制 GIC 硬件原理 GIC v3中断类别 GIC v3 组成 中断路由 中断状态机 中断处理流程 GIC 驱动 设备树 初始化 中断的映射 数据结构 中断控制器注册 ir ...

  6. Linux驱动开发学习笔记【8】:Linux中断系统

    目录 一.Linux内核中断处理过程 1.1.裸机中断 1.2.linux中断 二.linux中断的上半部和下半部 2.1 软中断 2.2 tasklet 2.3 工作队列 2.4 中断线程化 三.设 ...

  7. 吐血整理 | 肝翻 Linux 中断所有知识点

    Linux 中断管理机制 GIC 硬件原理 GIC,Generic Interrupt Controller.是ARM公司提供的一个通用的中断控制器.主要作用为:接受硬件中断信号,并经过一定处理后,分 ...

  8. linux中断系统那些事之----中断处理过程【转】

    转自:http://blog.csdn.net/xiaojsj111/article/details/14129661 以外部中断irq为例来说明,当外部硬件产生中断时,linux的处理过程.首先先说 ...

  9. 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结

    20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...

最新文章

  1. Windows 动态链接库DLL浅解
  2. 一年数十万次实验背后的架构与数据科学
  3. OpenCV中图像垂直拼接函数vconcat的使用
  4. 你不知道的CDN圈内黑话有哪些?
  5. 为什么spark没有java的交互模式?
  6. MySQL中union和order by一起使用的方法
  7. Springboot整合缓存
  8. 一文看懂哈夫曼树与哈夫曼编码
  9. LeetCode 311. 稀疏矩阵的乘法
  10. SQL Server中 sysobjects、syscolumns、systypes
  11. ibatis.net:第六天,QueryForList
  12. pyqt5 qscrollarea到达_PyQt5如何用QPainter在QScrollArea上画线?
  13. Java基础学习总结(39)——Log4j 1使用教程
  14. 【BZOJ】【1045/1465】【HAOI2008】糖果传递
  15. Python零基础:第一个Python程序“hello world“ 背后的运行你懂了吗?
  16. excel批量插入图片url显示方法
  17. 人工智能的历史与发展
  18. 不良事件总结怎么写_2017年第一季度不良事件总结分析
  19. 【PR】调整音频的声音从大到小
  20. Apple watch ,小米微信通知

热门文章

  1. 医疗大数据处理流程_我们需要数据来大规模改善医疗流程
  2. hive 导入hdfs数据_将数据加载或导入运行在基于HDFS的数据湖之上的Hive表中的另一种方法。
  3. netflix的准实验面临的主要挑战
  4. Java里面的静态代码块
  5. 创建字符串枚举的最好方法
  6. leetcode 1002. 查找常用字符
  7. react钩子_迷上了钩子:如何使用React的useReducer()
  8. [JLOI2015]管道连接(斯坦纳树)
  9. gulp基础使用方法记录
  10. NYOJ 1009 So Easy[Ⅰ]【简单题】