linux中断pollselcet按键处理机制
在上一篇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按键处理机制相关推荐
- arm Linux 中断管理机制
关键词:GIC.IAR.EOI.SGI/PPI/SPI.中断映射.中断异常向量.中断上下文.内核中断线程.中断注册. 1.1 ARM支持中断类型 ARM GIC-v2支持三种类型的中断: SGI:软件 ...
- (十三)linux中断底半部分处理机制
这篇文章介绍一下linux中断的底半部分的tasklet和workquene两种处理机制,其中tasklet中不能有延时函数,workquene的处理函数可以加入延时操作 目录 (一)tasklet小 ...
- linux 按键驱动中断 rockchip_7.自己写中断方式按键驱动程序(详解)
request_irq()和free_irq()分析完毕后,接下来开始编写上升沿中断的按键驱动 如下图,需要设置4个按键的EINT0, EINT2, EINT11, EINT19的模式为双边沿,且设置 ...
- Linux 中断实验
目录 Linux 中断简介 Linux 中断API 函数 上半部与下半部 设备树中断信息节点 获取中断号 硬件原理图分析 实验程序编写 修改设备树文件 按键中断驱动程序编写 编写测试APP 运行测试 ...
- Linux 中断所有知识点
目录 Linux 中断管理机制 GIC 硬件原理 GIC v3中断类别 GIC v3 组成 中断路由 中断状态机 中断处理流程 GIC 驱动 设备树 初始化 中断的映射 数据结构 中断控制器注册 ir ...
- Linux驱动开发学习笔记【8】:Linux中断系统
目录 一.Linux内核中断处理过程 1.1.裸机中断 1.2.linux中断 二.linux中断的上半部和下半部 2.1 软中断 2.2 tasklet 2.3 工作队列 2.4 中断线程化 三.设 ...
- 吐血整理 | 肝翻 Linux 中断所有知识点
Linux 中断管理机制 GIC 硬件原理 GIC,Generic Interrupt Controller.是ARM公司提供的一个通用的中断控制器.主要作用为:接受硬件中断信号,并经过一定处理后,分 ...
- linux中断系统那些事之----中断处理过程【转】
转自:http://blog.csdn.net/xiaojsj111/article/details/14129661 以外部中断irq为例来说明,当外部硬件产生中断时,linux的处理过程.首先先说 ...
- 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结
20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...
最新文章
- Windows 动态链接库DLL浅解
- 一年数十万次实验背后的架构与数据科学
- OpenCV中图像垂直拼接函数vconcat的使用
- 你不知道的CDN圈内黑话有哪些?
- 为什么spark没有java的交互模式?
- MySQL中union和order by一起使用的方法
- Springboot整合缓存
- 一文看懂哈夫曼树与哈夫曼编码
- LeetCode 311. 稀疏矩阵的乘法
- SQL Server中 sysobjects、syscolumns、systypes
- ibatis.net:第六天,QueryForList
- pyqt5 qscrollarea到达_PyQt5如何用QPainter在QScrollArea上画线?
- Java基础学习总结(39)——Log4j 1使用教程
- 【BZOJ】【1045/1465】【HAOI2008】糖果传递
- Python零基础:第一个Python程序“hello world“ 背后的运行你懂了吗?
- excel批量插入图片url显示方法
- 人工智能的历史与发展
- 不良事件总结怎么写_2017年第一季度不良事件总结分析
- 【PR】调整音频的声音从大到小
- Apple watch ,小米微信通知