Poll设备操作(国嵌笔记)
来源:互联网 发布:单片机圆孔插座 编辑:程序博客网 时间:2024/06/06 01:47
Poll设备操作
用户空间中的select对应内核中的Poll
1.select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。
int select(int maxfd,fd_set *readfds,fd_set *writefds,fe_set *exceptfds,const struct timeval *timeout)
maxfd:文件描述符的范围,比待检测的最大文件描述符大1即可
readfds:被读监控的文件描述符
writefds:被写监控的文件描述符
exceptfds:被异常监控的文件描述符
timeout:定时器,0:不管是否满足要求,都会立即返回。NULL:select将阻塞,直到某个文件满足要求。正整数:就是等待的最长时间,即select在timeout时间内阻塞进程
2.返回值:正常情况下,返回满足要求的文件描述符个数,经过timeout等待后仍无文件满足要求,返回0;select被某个信号中断,返回-1并设errno为EINTR;如果出错,返回-1并设置相应的errno
3.使用步骤:
1.将要监控的文件添加到文件描述符集
2.调用select开始监控
3.判断文件是否发生变化
系统提供了4个宏来对描述符集来进行描述
#include<sys/select.h>
FD_SET,FD_CLR,FD_SERO,FD_ISSET
4.poll方法
原型:unsigned int(*poll)(struct file *filp,poll_table *wait)
poll设备方法负责完成
1.使用poll_wait将等待队列添加到poll_table
2.返回描述设备是否可读或可写的掩码(POLLIN,POLLRDNORM等)
5.范例
static unsigned int mem_poll(struct file *filp,poll_table *wait)
{
struct scull_pipe *dev =filp->private_data;
unsigned int mask=0;
//把等待队列添加到poll_table中
poll_wait(filp,&dev->inq,wait);
//返回掩码
if(有数据可读)
mask=POLLIN|POLLRDNORM;//设备可读
return mask;
}
6.工作原理
Poll方法只是做一个登记,真正的阻塞发生在select.c中的do_select函数。
do_select中根据返回的掩码来决定是否发生阻塞(通过调度)
用户空间中的select对应内核中的Poll
1.select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。
int select(int maxfd,fd_set *readfds,fd_set *writefds,fe_set *exceptfds,const struct timeval *timeout)
maxfd:文件描述符的范围,比待检测的最大文件描述符大1即可
readfds:被读监控的文件描述符
writefds:被写监控的文件描述符
exceptfds:被异常监控的文件描述符
timeout:定时器,0:不管是否满足要求,都会立即返回。NULL:select将阻塞,直到某个文件满足要求。正整数:就是等待的最长时间,即select在timeout时间内阻塞进程
2.返回值:正常情况下,返回满足要求的文件描述符个数,经过timeout等待后仍无文件满足要求,返回0;select被某个信号中断,返回-1并设errno为EINTR;如果出错,返回-1并设置相应的errno
3.使用步骤:
1.将要监控的文件添加到文件描述符集
2.调用select开始监控
3.判断文件是否发生变化
系统提供了4个宏来对描述符集来进行描述
#include<sys/select.h>
FD_SET,FD_CLR,FD_SERO,FD_ISSET
4.poll方法
原型:unsigned int(*poll)(struct file *filp,poll_table *wait)
poll设备方法负责完成
1.使用poll_wait将等待队列添加到poll_table
2.返回描述设备是否可读或可写的掩码(POLLIN,POLLRDNORM等)
5.范例
static unsigned int mem_poll(struct file *filp,poll_table *wait)
{
struct scull_pipe *dev =filp->private_data;
unsigned int mask=0;
//把等待队列添加到poll_table中
poll_wait(filp,&dev->inq,wait);
//返回掩码
if(有数据可读)
mask=POLLIN|POLLRDNORM;//设备可读
return mask;
}
6.工作原理
Poll方法只是做一个登记,真正的阻塞发生在select.c中的do_select函数。
do_select中根据返回的掩码来决定是否发生阻塞(通过调度)
0 0
- Poll设备操作(国嵌笔记)
- 字符设备驱动学习笔记--按键驱动深化:poll或select操作
- Linux高级字符设备之Poll操作
- Linux高级字符设备之Poll操作
- Linux高级字符设备之Poll操作
- Linux高级字符设备之Poll操作
- 字符设备之笔记-Poll机制分析
- linux字符设备驱动-poll机制笔记
- linux设备驱动开发-高级字符设备操作poll
- 高级字符设备驱动-Poll设备方法笔记
- 3、Linux设备驱动---轮询操作poll()函数
- led灯实验之字符设备驱动poll操作
- mmap设备操作-内存映射,把文件映射到内存中(国嵌笔记)
- poll 操作
- Linux设备驱动程序第三版学习(7)- 高级字符驱动程序操作(续2)- poll/select
- Linux设备驱动程序第三版学习(7)- 高级字符驱动程序操作(续2)- poll/select .
- linux驱动开发--字符设备:设备轮询操作select/poll
- poll设备方法
- 类加载过程
- PowerPoint2013无法播放
- forward(转发)和redirect(重定向)的区别
- 3
- 用php写简单的json数据
- Poll设备操作(国嵌笔记)
- Loader异步加载
- java网络编程基础
- Android View 滚动的轮子-WheelView
- IT 人如何寻找电子书籍呢?
- 自动创建设备文件 (国嵌笔记)
- boost的多线程学习一
- printf("%d",5.01)和printf("%f",5)的输出结果
- Hdoj 1424 Rescue 【BFS】