Linux驱动16 --- POLL 轮询

目录

一、POLL

1.1 介绍

1.2 poll 应用接口

1.3 poll 内核接口

        poll 的工作函数


一、POLL

1.1 介绍

        多路 IO 的实现方式之一

        POLL 轮询

        多路 IO 方法:将多个阻塞变成一个阻塞

        统一管理套接字

1.2 poll 应用接口

        特点:

        1、有事件的概念

        2、只能返回异动套接字的个数,无法返回准确的异动套接字

        3、需要轮询查询异动的套接字

        头文件:#include

        函数原型

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

        函数参数

                fds:存放套接字的空间首地址

                        struct pollfd{

                                int fd;        /* file descriptor */文件描述符

                                short events;         /* requested events */监听的事件

                                short revents;         /* returned events */返回的事件 --- 监听到的事件

                        }

                事件:POLLIN,POLLOUT,POLLERR

                nfds:监听的结构体的数量

                timeout:填-1 表示一直监听直到有套接字异动结束

        函数返回值

                有套接字异动,返回异动套接字的个数 ,超时返回 0 ,失败返回负数

1.3 poll 内核接口

        头文件:#include

        函数原型

                __poll_t (*poll) (struct file *, struct poll_table_struct *)

        函数参数

                struct file *:会用于多节点的区分

                struct poll_table_struct *:poll 从应用层传递过来的结构体的信息

                                直接作为一个参数,传递给 poll 的工作函数

        poll 的工作函数

        函数原型

                void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)

        函数参数

                struct file * filp:(*poll)的第一个参数

                wait_address:等待队列的地址

                        poll 是阻塞的,而 poll 的阻塞是通过等待队列实现的

                        p:(*poll)的第二个参数

        对于 poll 来说,最重要的就是 poll 的使用  

你可能感兴趣的:(Linux驱动开发,linux,服务器,嵌入式硬件,驱动开发,单片机)