linux设备驱动--非阻塞IO与select,poll调用
来源:互联网 发布:网络用语rj是什么意思 编辑:程序博客网 时间:2024/04/27 14:34
在linux应用编程中,经常要用到select和poll调用。select和poll的功能本质是一样的,都允许进程决定是否可以对一个或多个打开的文件做非阻塞的读或写。
举几个工作中用到的select或poll例子:1、编解码中,监听几个编解码通道的;2、对于主CPU,监听挂载的几个dsp;3、socket编程等等。
对于驱动程序而言,上面的系统调用通过驱动程序中file_operations中的poll方法实现。
poll的方法原型是:
unsigned int (*poll) (struct file *, struct poll_table_struct *);
该方法分为两步处理:
1、对可能引起设备文件变化的等待队列调用poll_wait()函数,将对应的等待队列头添加到poll_table.
2、返回一个用来描述操作是否可以立即无阻塞读写访问的位掩码.
按照设备驱动中poll()函数的典型模板(linux设备驱动开发详解第2版),完成scullfifo。关于select系统调用,等待队列这些深入的细节,过段时间要专门kgdb一下。
static unsigned int scull_poll(struct file *filp, poll_table *wait){unsigned int mask = 0;struct scull_dev *dev = filp->private_data;down(&dev->sem);poll_wait(filp, &dev->r_wait, wait);poll_wait(filp, &dev->w_wait, wait);if(dev->current_len != 0){mask |= POLLIN | POLLRDNORM;}if(dev->current_len != SCULL_SIZE ){mask |= POLLOUT | POLLWRNORM;}up(&dev->sem);return mask;}
select系统调用,可以监听scull设备文件是否可读或者可写。
- linux设备驱动--非阻塞IO与select,poll调用
- linux设备驱动--非阻塞IO与select,poll调用 (续1)
- linux设备驱动--非阻塞IO与select,poll调用 (续2)
- Linux设备驱动中的阻塞与非阻塞IO
- linux设备驱动中的阻塞与非阻塞IO
- Linux驱动学习8(非阻塞IO的实现--select/poll方法)
- Linux 内核驱动--阻塞与非阻塞机制及Poll/Select分析if
- Linux 内核驱动--阻塞与非阻塞机制及Poll/Select分析
- Linux IO技术体系(阻塞 非阻塞 同步 异步 多路IO复用select poll epoll 信号驱动 异步)
- linux设备驱动中的阻塞IO和非阻塞IO
- Linux设备驱动中的阻塞与非阻塞IO与并发控制
- python# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selector
- linux设备驱动中的阻塞和非阻塞IO
- linux设备驱动的阻塞与非阻塞的IO操作
- linux select函数用法 && 阻塞与非阻塞IO
- linux select函数用法 && 阻塞与非阻塞IO
- IO-同步异步,阻塞非阻塞,select, poll , epoll
- 转载_Linux 内核驱动--阻塞与非阻塞机制及Poll/Select分
- GLIB 安装手记
- python中可hash的对象
- Servlet生命周期与工作原理
- 第三周 任务三
- libnet使用举例(2)
- linux设备驱动--非阻塞IO与select,poll调用
- js匹配大全
- 浮点数的比较
- objective-c中的 内存管理(六)
- 万能makefile
- JQuery实现操作Checkbox,Table,鼠标放在图片上放大效果
- libnet使用举例(3)
- ural 1684 Jack's Last Word
- libnet使用举例(4)