从零开始之驱动发开、linux驱动(十六、poll机制)
上一节分析了系统调用函数的封装,这一节我们学习一下poll系统调用函数。就从最开始的sys_poll开始。
在开始之前我们先了解一下poll函数的作用。
使用下面命令查看poll的使用方法和作用可知
man 2 poll
官方的解释是:poll函数是用来,等待一组文件描述符中的一个准备好执行 I / O
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
函数原型如上所示
其中第一个结构体指针代表这个文件描述符,第二个参数代表文件的数量(上面说了是一组文件描述符),第三个参数,代表等待超时自动唤醒时间。
官网的解释说的太拗口,这用白话解释一下,poll函数可以等待多个文件描述符(该进程open打开的多个文件),如果要继续执行某个操作,必须要先得到IO,否则就睡眠,但这里的睡眠可以设置睡眠时间限制,即如果在设定时间到来之前还没有发生该事件,则时间到后会自动唤醒。其中因为可以设置多个文件描述符的等待事件,这里只要等到一个文件描述符的事件,则就会立刻返回。
在这里我先列出代码,后面分析poll机制的实现。
#include <linux/fs.h> /* 包含file_operation结构体 */
#include <linux/init.h> /* 包含module_init module_exit */
#include <
从零开始之驱动发开、linux驱动(十六、poll机制)相关推荐
- 驱动学习(十)poll机制
驱动学习(十)poll机制 文章目录 驱动学习(十)poll机制 1. io多路复用思想: 2. 驱动如何实现poll机制呢? 3.测试 1. io多路复用思想: 1 构建一张文件描述符集合表 fd_ ...
- Linux驱动 简单的Linux驱动基础知识
Linux驱动 简单的Linux驱动基础知识 一.简述 记--Linux驱动学习笔记. Linux驱动程序初始化硬件设备,并提供硬件控制接口给更上一层的应用调用. 例如使用QT应用程序 ...
- 从零开始之驱动发开、linux驱动(四十七、linux下的IIC框架【1】)
I2C总线仅仅使用SCL. SDA这两根信号线就实现了设备之间的数据交互, 极大地简化了对硬件资源和PCB板布线空间的占用. 因此, I2C总线非常广泛地应用在EEPROM. 实时钟. 小型LCD等设 ...
- linux用户空间flash驱动,全面掌握Linux驱动框架——字符设备驱动、I2C驱动、总线设备驱动、NAND FLASH驱动...
原标题:全面掌握Linux驱动框架--字符设备驱动.I2C驱动.总线设备驱动.NAND FLASH驱动 字符设备驱动 哈~ 这几天都在发图,通过这种方式,我们希望能帮大家梳理学过的知识,全局的掌握Li ...
- linux更新驱动脚本,编写Linux驱动常见错误(不断更新)!
工作中遇到的编写Linux驱动的常见错误和注意事项整理,将不断更新. 问题1.驱动的init函数声明错误 出错: [root@localhost]# insmod phyinfo.ko insmod: ...
- 武汉linux驱动培训转让,linux驱动培训靠谱吗
作为一名Linux爱好者,在Linux的世界中也算是半个老司机了,从桌面玩到服务器.从ubuntu到centos.从计算机到路由器,各种Linux的花俏玩法都略有体验.作者并非职业Linux选手,我仅 ...
- linux内核驱动ldd3_走进linux 驱动开发 之 内核模块
一.Linux内核简介 1.宏内核与微内核 内核分为四大类:单内核(宏内核):微内核:混合内核:外内核. 宏内核(Monolithickernel)是将内核从整体上作为一个大过程来实现,所有的内核服务 ...
- STM32驱动SDIO WIFI 介绍(十六) ---- 上位机UDP操作/代码
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- 从零开始之驱动发开、linux驱动(四十五、DM9000网卡驱动)
这里我们肯定不是要从零开始编写网卡驱动的. 因为编写网卡驱动时,需要网络基础知识,特别是网络底层的知识,目前还没学. 将来我可能选择在,网络,图像视屏,或USB这个三个方向,选择一个深入钻研. 这里主 ...
最新文章
- linux 上配置swoole
- DecimalFormat 类
- 句法分析(syntactic parsing)在NLP领域的应用是怎样的
- Apache Camel 3只有2个月的路程
- RESTEasy教程第2部分:Spring集成
- 自己做的一个登录页面,纯代码!
- springboot中配置mybatis数据源,使用阿里的 Druid 数据库连接池
- 周末总是被工作打扰_如何在不打扰任何人的情况下问为什么在工作中
- 【HDU-5246】超级赛亚ACMer(贪心)
- Microsoft AJAX Library对 String的扩展
- logstash nginx error access 日志处理
- 使用socat实现对asok的远程访问
- es6中一些基本的使用方法
- 火山PC表格及Excel的导入导出案例
- 用Struts2写了一个小Demo,含简单的CRUB功能
- EVE-NG模拟器教程(二)——模拟器安装
- phpMyAdmin下载、安装和使用入门教程
- oracle 查历史数据,Oracle 查询历史数据(转帖)
- 香港电影经典回顾之爱情二十四章经
- 阿里巴巴矢量图标库使用步骤
热门文章
- Linux网络编程必备的POSIX API的细节
- 时间、延迟及延缓操作
- Libuv Timer定时器
- 章节分割器 v2.0 Beta0618 版
- 8、什么是响应式设计?响应式设计的基本原理是什么?如何做?
- 【中间件】RabbitMQ入门学习笔记
- Unity3D调用Android提供的接口
- 项目管理工具之Git/GitHub/Gitee/Gitlab
- Java项目:考试在线报名管理系统(java+SSM+HTML+JS+jsp+mysql)
- python开发之Socket网络编程