上一节分析了系统调用函数的封装,这一节我们学习一下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机制)相关推荐

  1. 驱动学习(十)poll机制

    驱动学习(十)poll机制 文章目录 驱动学习(十)poll机制 1. io多路复用思想: 2. 驱动如何实现poll机制呢? 3.测试 1. io多路复用思想: 1 构建一张文件描述符集合表 fd_ ...

  2. Linux驱动 简单的Linux驱动基础知识

    Linux驱动 简单的Linux驱动基础知识 一.简述         记--Linux驱动学习笔记. Linux驱动程序初始化硬件设备,并提供硬件控制接口给更上一层的应用调用. 例如使用QT应用程序 ...

  3. 从零开始之驱动发开、linux驱动(四十七、linux下的IIC框架【1】)

    I2C总线仅仅使用SCL. SDA这两根信号线就实现了设备之间的数据交互, 极大地简化了对硬件资源和PCB板布线空间的占用. 因此, I2C总线非常广泛地应用在EEPROM. 实时钟. 小型LCD等设 ...

  4. linux用户空间flash驱动,全面掌握Linux驱动框架——字符设备驱动、I2C驱动、总线设备驱动、NAND FLASH驱动...

    原标题:全面掌握Linux驱动框架--字符设备驱动.I2C驱动.总线设备驱动.NAND FLASH驱动 字符设备驱动 哈~ 这几天都在发图,通过这种方式,我们希望能帮大家梳理学过的知识,全局的掌握Li ...

  5. linux更新驱动脚本,编写Linux驱动常见错误(不断更新)!

    工作中遇到的编写Linux驱动的常见错误和注意事项整理,将不断更新. 问题1.驱动的init函数声明错误 出错: [root@localhost]# insmod phyinfo.ko insmod: ...

  6. 武汉linux驱动培训转让,linux驱动培训靠谱吗

    作为一名Linux爱好者,在Linux的世界中也算是半个老司机了,从桌面玩到服务器.从ubuntu到centos.从计算机到路由器,各种Linux的花俏玩法都略有体验.作者并非职业Linux选手,我仅 ...

  7. linux内核驱动ldd3_走进linux 驱动开发 之 内核模块

    一.Linux内核简介 1.宏内核与微内核 内核分为四大类:单内核(宏内核):微内核:混合内核:外内核. 宏内核(Monolithickernel)是将内核从整体上作为一个大过程来实现,所有的内核服务 ...

  8. STM32驱动SDIO WIFI 介绍(十六) ---- 上位机UDP操作/代码

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  9. 从零开始之驱动发开、linux驱动(四十五、DM9000网卡驱动)

    这里我们肯定不是要从零开始编写网卡驱动的. 因为编写网卡驱动时,需要网络基础知识,特别是网络底层的知识,目前还没学. 将来我可能选择在,网络,图像视屏,或USB这个三个方向,选择一个深入钻研. 这里主 ...

最新文章

  1. linux 上配置swoole
  2. DecimalFormat 类
  3. 句法分析(syntactic parsing)在NLP领域的应用是怎样的
  4. Apache Camel 3只有2个月的路程
  5. RESTEasy教程第2部分:Spring集成
  6. 自己做的一个登录页面,纯代码!
  7. springboot中配置mybatis数据源,使用阿里的 Druid 数据库连接池
  8. 周末总是被工作打扰_如何在不打扰任何人的情况下问为什么在工作中
  9. 【HDU-5246】超级赛亚ACMer(贪心)
  10. Microsoft AJAX Library对 String的扩展
  11. logstash nginx error access 日志处理
  12. 使用socat实现对asok的远程访问
  13. es6中一些基本的使用方法
  14. 火山PC表格及Excel的导入导出案例
  15. 用Struts2写了一个小Demo,含简单的CRUB功能
  16. EVE-NG模拟器教程(二)——模拟器安装
  17. phpMyAdmin下载、安装和使用入门教程
  18. oracle 查历史数据,Oracle 查询历史数据(转帖)
  19. 香港电影经典回顾之爱情二十四章经
  20. 阿里巴巴矢量图标库使用步骤

热门文章

  1. Linux网络编程必备的POSIX API的细节
  2. 时间、延迟及延缓操作
  3. Libuv Timer定时器
  4. 章节分割器 v2.0 Beta0618 版
  5. 8、什么是响应式设计?响应式设计的基本原理是什么?如何做?
  6. 【中间件】RabbitMQ入门学习笔记
  7. Unity3D调用Android提供的接口
  8. 项目管理工具之Git/GitHub/Gitee/Gitlab
  9. Java项目:考试在线报名管理系统(java+SSM+HTML+JS+jsp+mysql)
  10. python开发之Socket网络编程