Linux poll机制

Linux poll机制提供了高效的数据请求方式,避免了死循环的CPU消耗和无休眠的等待。它允许程序在条件不满足时休眠指定时间,或通过异步通知进行事件处理。在内核中,poll函数涉及复杂的调用过程,包括将进程挂载到等待队列和返回事件类型。当事件发生时,进程被唤醒,否则将进入休眠状态,等待事件触发。
摘要由CSDN通过智能技术生成

一、在用户空间应用程序向驱动程序请求数据时,有以下几种方式:

1.不管查询,条件不满足的情况下就是死循环,非常耗cpu

2.休眠唤醒的方式,如果条件不满足,应用程序则一直睡眠下去

3.poll机制:如果条件不满足,休眠指定的时间,休眠时间内条件满足唤醒,条件一直不满足时间到达自动唤醒

4.异步通知:应用程序注册信号处理函数函数,驱动程序发信号。类似于QT的信号与槽机制

二、函数

2.1.函数原型

int poll(struct pollfd *fds, nfds_t nfds, int timeout);

2.2.事件类型events可以为下列值:

POLLIN:有数据可读
POLLRDNORM:有普通数据可读,等效于POLLIN
POLLRDBAND:有优先数据可读
POLLPRI:有紧迫数据可读
POLLOUT:写数据不会导致阻塞
POLLWRNORM:写普通数据不会导致阻塞
POLLWRBAND:写优先数据不会导致阻塞
POLLMSG:SIGPOLL消息可用
POLLER:指定的文件描述符发生错误
POLLHUP:指定的文件描述符挂起事件
POLLNVAL:无效的请求,打不开指定的文件描述符

2.3.返回值

有事件发生,返回events域不为0的文件描述符个数(也就是说事件发生,或者错误报告),超时返回0,失败返回-1,并设置errno为错误类型

三、linux内核poll实现机制

从应用程序调用poll()函数开始,一直到调用drivers_poll函数,期间的过程很复杂,捡主要的内容列出来:


                
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值