都允许进程决定是否可以对一个或者多个打开的文件做非阻塞的读取或写入。这些调用也会阻塞进程,直到给定的文件描述符集合中的任何一个可读取或写入。常常用于那些要使用多个输入或输出流而又不会阻塞与其中任意一个流的应用程序。

unsigned int (*poll)(struct file *filp,poll_table *wait);

当用户程序使用在驱动程序相关联的文件描述符上执行poll,select,或者epoll系统调用时,该驱动程序方法调用。

分两步:

1.在一个或者多个可指示poll状态变化的等待队列上调用poll_wait。如果当前没有文件描述符可以用来执行IO,则内核将使进程在传递到该系统调用的所有文件描述符对应的等待队列上等待。

2.返回一个用来描述操作是否可以立即无阻塞执行的位掩码。

这些都依赖于驱动程序提供的信息,必须为每一个驱动程序分别实现对应操作。传递给poll方法的第二个参数,poll_table结构,用于在内核中实现poll、select以及epoll调用。它在<linux/poll.h>中声明,驱动程序源代码必须包含这个头文件。驱动程序编写者不需要了解改结构的细节,且需要将其当成一个不透明对象使用。它被传递给驱动程序方法,以使每个可以唤醒进程和修改poll操作状态的等待队列都可以被驱动程序装载。通过poll_wait函数,驱动程序向poll_table结构添加一个等待队列:

void poll_wait(struct file *,wait_queue_head_t *,poll_table *);

poll方法执行的第二项任务是返回描述那个操作可以理解执行的位掩码,这也很直接,例如,如果设备已有数据就绪,一个read操作可以立刻完成而不用休眠,那么poll方法应该指出这种情况。几个标志(在<linux/poll.h>asm/poll.h)用来指明可能的操作。

poll和select的更多相关文章

  1. 【Pyhton Network】使用poll()或select()实现非阻塞传输

    通常情况下,socket上的I/O会阻塞.即除非操作结束,否则程序不会照常进行.而以下集中情况需要在非阻塞模式下进行:1. 网络接口在等待数据时是活动的,可以做出相应:2. 在不使用线程或进程的情况下 ...

  2. poll() 与 select()比较

    比较poll() 与select() 尽管poll()和select()所做的是相同的工作,不过poll()优于select(),原因:    1.poll()不需要用户计算并传递作为参数的最高编号的 ...

  3. linux epoll,poll,select

    epoll函数用法,还有点poll和select 1,LT的epoll是select和poll函数的改进版. 特点是,读完缓冲区后,如果缓冲区还有内容的话,epoll_wait函数还会返回,直到把缓冲 ...

  4. 四、poll()、select()和epoll()

    在用户程序中,poll()和select()系统调用用于对设备进行无阻塞访问.poll()和select()最终会调用设备驱动中的poll()函数,在我所使用的Linux内核中,还有扩展的poll() ...

  5. poll 和 select 底层的数据结构

    poll 和 select 系统调用的真正实现是相当地简单, 对那些感兴趣于它如何工作的人; epoll 更加复杂一点但是建立在同样的机制上. 无论何时用户应用程序调用 poll, select, 或 ...

  6. linux poll 和 select

    使用非阻塞 I/O 的应用程序常常使用 poll, select, 和 epoll 系统调用. poll, select 和 epoll 本质上有相同的功能: 每个允许一个进程来决定它是否可读或者写一 ...

  7. 多路转接之poll和select

    先看poll(): #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  8. [转] Epoll 相对Poll和Select的优点

    http://blog.csdn.net/summerhust/article/details/18260117 PS: 相对select来说,Poll的监听列表比select更短,并且Poll的监听 ...

  9. Linux中的sleep、usleep、nanosleep、poll和select

    在进行Linux C/C++编程时,可调用的sleep函数有好多个,那么究竟应当调用哪一个了?下表列出了这几个函数间的异同点,可作为参考: 性质 精准度 线程安全 信号安全 sleep libc库函数 ...

随机推荐

  1. Python创建多进程,用Queue传递信息

    创建10个进程,分别计算0到1000各个区间的和,主进程汇总 __author__ = 'Administrator' # -*- coding:utf-8 -*- ''' @author:qiush ...

  2. Java中需要总结的几个问题

    慢慢总结,不然每次百度挺心烦的. 1. java文件的读写 2. String和StringBuffer的区别

  3. iOS开发的一些奇巧淫技(转载)

    iOS开发的一些奇巧淫技 http://www.cocoachina.com/ios/20141229/10783.html iOS开发的一些奇巧淫技2 http://www.cocoachina.c ...

  4. visible绑定(The "visible" binding)

    对visible进行绑定可以控制元素的显示和隐藏. 示例: <div data-bind="visible: shouldShowMessage"> You will ...

  5. linux命令英文缩写的含义(方便记忆)

    命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户 rpm:redhat package manager 红帽子打包 ...

  6. img转data

    http://blog.csdn.net/lwjok2007/article/details/50756273

  7. Shell脚本常用判断

    -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真  -f filename 如果 filename为常规文件,则为真 -L fi ...

  8. GDB: advanced usages

    Sometimes running program in Unix will fail without any debugging info or warnings because of the la ...

  9. winsock编程WSAAsyncSelect模型

    winsock编程WSAAsyncSelect模型 WSAAsyncSelect模型也称异步选择模型,其核心函数是WSAAsyncSelect.它可以用来在一个socket上接收以windows消息为 ...

  10. kindle网络爬虫续集

    简单介绍: 这次我们要爬的网页是:Kindle商店中的今日特价书,其中每周/每月特价书同理,就不再重复了选择这个网页的原因有两个:一是实用,很多人都会经常去看看Kindle特价书有没有自己喜欢的:二是 ...