Linux 设备驱动--- Poll 方法 --- Select【转】
转自:http://blog.csdn.net/yikai2009/article/details/8653842
版权声明:本文为博主原创文章,未经博主允许不得转载。
在驱动 ( 内核空间 ) Poll 方法 对应的是 Select 系统调用 ( 用户空间 ).
Poll -------------------------> Select
Select - 系统调用 int select - 功能:
Seclect 系统调用用于多路监控,当没有一个文件满足要求时,Select将阻塞调用进程.
函数:
int select ( int maxfd , fd_set *readfds , fd_set * writefds , fe_set *exceptfds , const stuct timeval * timeout ) .
参数:
Maxfd : 文件描述符的范围,比待检测的最大文件描述符 大 1 .
Readfds :被读检测的文件描述符集.
Writefds :被写监控的文件描述符集.
Exceptfds:被异常监控的文件描述符集.
Timeout :定时器.
Timeout 取不同的值。该调用有不同的表现:
1,Timeout 值为 0,不管是否有文件满足要求,都立刻返回.
无文件满足要求返回 0 ,有文件满足要求返回一个正值.
2,Timeout 为 NULL .Select 将阻塞进程. 直到某个文件满足要求.
3,Timeout 为正整数,就是等待的最长时间,即 Select 在 Timeout 时间内阻塞进程.
返回值:
Select 调用返回时,返回值有如下情况:
1,正常情况下返回满足要求的文件描述符个数.
2,经过了 Timeout 等待后仍无文件满足要求,返回值为 0 .
3,如果 Select 被某个信号中断,它将返回 -1 并 设置 errno 为 EINTR .
4,如果出错,返回 -1 并设置相应的 errno .
Select - 系统调用- 使用方法:
1,将要监控的文件添加到文件描述符集.
2,调用 Select 开始监控.
3,判断文件是否发生变化.
四个宏对描述符集进行操作 - FD_SET - FD_CLR - FD_ZERO - FD_ISSET :
Poll 方法 - 驱动中 int (*poll) :
Poll 设备方法负责完成 - 驱动中 :
使用 poll_wait 将等待队列添加到 poll_table 中:
返回描述设备是否 可读 或者 可写 的掩码 - POLLIN :
eg:
Poll 工作原理:
Poll 方法只是做一个登记,真正的阻塞发生在 select.c 中的 do_select 函数中.
Linux 设备驱动--- Poll 方法 --- Select【转】的更多相关文章
- Linux高级字符设备驱动 poll方法(select多路监控原理与实现)
1.什么是Poll方法,功能是什么? 2.Select系统调用(功能) Select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程. int selec ...
- linux设备驱动归纳总结(三):6.poll和sellct【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-61749.html linux设备驱动归纳总结(三):6.poll和sellct xxxxxxxxxx ...
- 【Linux开发】linux设备驱动归纳总结(三):6.poll和sellct
linux设备驱动归纳总结(三):6.poll和sellct xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- linux设备驱动第四篇:驱动调试方法
http://www.cnblogs.com/donghuizaixian/archive/2015/04/02/4387083.html 上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神, ...
- linux设备驱动第四篇:从如何定位oops的代码行谈驱动调试方法
上一篇我们大概聊了如何写一个简单的字符设备驱动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试.在普通的c应用程序中,我们经常使用printf来输出信息,或者使用gdb来调试程序 ...
- Linux 设备驱动 Edition 3
原文网址:http://oss.org.cn/kernel-book/ldd3/index.html Linux 设备驱动 Edition 3 By Jonathan Corbet, Alessand ...
- Linux设备驱动中的阻塞和非阻塞I/O
[基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件后再进行操作.被挂起的进程进入休眠状态(不占用cpu资源),从调度器的运行队列转移到等待队列,直到 ...
- linux 设备驱动概述
linux 设备驱动概述 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer): 主要利用C库函数和 ...
- 华清远见Linux设备驱动(每章小结)
1. linux设备驱动是以内核模块的方式而存在的,在具体的驱动开发中将驱动编译为模块具有很到的工程意义.因为如果将正在开发中的驱动编译如内核,而开发过程中会不断修改驱动代码,则需要不断的编译和重启 ...
随机推荐
- PAT Basic 1057
1057 数零壹 给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有 ...
- git的使用入门
写作目的: 快速的上手git版本控制+github神器进行基本的版本同步操作. 怎么做? 对于任意一个代码项目,使用git_bash进入到代码目录 如果没有进行过初始化操作:应当使用git init ...
- git rebase -i
git rebase -i 作用: 合并提交 示例: 如图所示: 原因: 出现了两个第十一章的提交信息, 其实提交内容是一样的, 但是提交概述不一样. 这就让我很不爽. 我想把两次的概述信息合并为一个 ...
- C# WinForms跨线程更新 UI
与在Android中一样, 子线程中更新UI被认为是线程不安全的, 会抛出异常. 子线程返回UI线程中更新UI的一个方法为: 1, 捕获应用的UI线程的上下文; 2, 定义线程任务; 3, 定义线程任 ...
- Android 布局跟着NAVIGATION_BAR 重新布局
要想让自己的布局跟着NAVIGATION_BAR 的变化重新布局,就不要设置 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION. 这个FLAG. 这个flag 设置之后,你的 ...
- Mybatis常用xml
工作中mybatis常用的xml代码 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ma ...
- Django 2.0官方文档中文 总索引
Django 2.0官方文档中文 渣翻 总索引 翻译 2017年12月08日 11:19:1 官方原文: https://docs.djangoproject.com/en/2.0/ 当前翻译版本: ...
- HTML5技巧
HTML5技巧 HTML5 技巧一:当今科技发展的速度真惊人,稍不留神,就可能无法跟上它的步伐.新一代的HTML-HTML5的发展也不停的带给我们新的惊喜,我们将通过这篇文章向大家介绍一些HTML ...
- Unicode字符图标
http://unicode-table.com/cn/#control-character
- 【Balanced Binary Tree】cpp
题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...