[Linux服务器] Linux poll机制

107 0
Honkers 昨天 13:05 来自手机 | 显示全部楼层 |阅读模式

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

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

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

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

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

二、函数

2.1.函数原型

  1. int poll(struct pollfd *fds, nfds_t nfds, int timeout);
复制代码

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

  1. POLLIN:有数据可读
  2. POLLRDNORM:有普通数据可读,等效于POLLIN
  3. POLLRDBAND:有优先数据可读
  4. POLLPRI:有紧迫数据可读
  5. POLLOUT:写数据不会导致阻塞
  6. POLLWRNORM:写普通数据不会导致阻塞
  7. POLLWRBAND:写优先数据不会导致阻塞
  8. POLLMSG:SIGPOLL消息可用
  9. POLLER:指定的文件描述符发生错误
  10. POLLHUP:指定的文件描述符挂起事件
  11. POLLNVAL:无效的请求,打不开指定的文件描述符
复制代码

2.3.返回值

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

三、linux内核poll实现机制

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

[code][/code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

特级红客

关注
  • 3183
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行