IT袋

当前位置:主页 > 经验教程 > 系统教程 >

Linux

Linux poll详解

时间:2024-01-09 15:58:29 来源:IT袋 作者:马勇
导读:Linux,小编为大家讲一讲Linux的IT小经验,一定能解决您的问题的,一起来了解吧! poll  函数用于检测一组文件描述符( F ile  D escriptor,  fd )上的可读可写和出错事件,其函数

Linux

小编为大家讲一讲Linux的IT小经验,一定能解决您的问题的,一起来了解吧!

poll 函数用于检测一组文件描述符(File Descriptor, fd)上的可读可写和出错事件,其函数签名如下:

#include <poll.h>
int poll(struct pollfd* fds, nfds_t nfds, int timeout);

参数解释:

  • fds:指向一个结构体数组的首个元素的指针,每个数组元素都是一个struct pollfd结构,用于指定检测某个给定的 fd 的条件;
  • nfds:参数 fds 结构体数组的长度,nfds_t 本质上是 unsigned long int,其定义如下:
typedef unsigned long int nfds_t;
  • timeout:表示 poll 函数的超时时间,单位为毫秒。

struct pollfd 结构体定义如下:

struct pollfd {
    int   fd;         /* 待检测事件的 fd       */
    short events;     /* 关心的事件组合        */
    short revents;    /* 检测后的得到的事件类型  */
};

struct pollfd的 events 字段是由开发者来设置,告诉内核我们关注什么事件,而 revents 字段是 poll 函数返回时内核设置的,用以说明该 fd 发生了什么事件。

events 和 revents 一般有如下取值:

事件宏事件描述是否可以作为输入(events)是否可以作为输出(revents)
POLLIN数据可读(包括普通数据&优先数据)
POLLOUT数据可写(普通数据&优先数据)
POLLRDNORM等同于 POLLIN
POLLRDBAND优先级带数据可读(一般用于 Linux 系统)
POLLPRI高优先级数据可读,例如 TCP 带外数据
POLLWRNORM等同于 POLLOUT
POLLWRBAND优先级带数据可写
POLLRDHUPTCP连接被对端关闭,或者关闭了写操作,由 GNU 引入
POPPHUP挂起
POLLERR错误
POLLNVAL文件描述符没有打开

poll检测一组 fd 上的可读可写和出错事件的概念与前文介绍select的事件含义一样,这里就不再赘述。poll

相关阅读