跳转至

poll

poll 提供基于文件描述符的 I/O 多路复用机制,支持同时监视多个文件描述符上的可读、可写及异常事件,并支持超时等待。

头文件清单

#include "open_source/musl/include/poll.h"

接口清单

接口名称 功能简述
poll 监视文件描述符集合上的I/O事件

Functions

poll

int poll (struct pollfd *, nfds_t, int)

头文件清单

#include "open_source/musl/include/poll.h"

功能说明

  • 等待一组文件描述符上的I/O事件就绪
  • 支持同时监视多个文件描述符的可读、可写及异常事件
  • 支持设置超时时间,超时后返回0;传入负值表示无限等待

入参

名称 参数类型 详细说明 约束取值范围
fds struct pollfd * 指向pollfd结构体数组的指针,每个元素指定一个待监视的文件描述符及其感兴趣的事件 非NULL指针
nfds nfds_t fds数组中的元素个数 大于等于0的无符号整数值
timeout int 超时时间,单位为毫秒 -1(无限等待) / 0(立即返回) / 正整数(等待指定毫秒数)

返回值

  • 返回类型:int
返回值 文字含义 触发场景
正整数 有就绪事件的文件描述符数量 至少一个文件描述符上有请求的事件就绪
0 超时且无事件就绪 在指定的超时时间内没有任何文件描述符就绪
-1 调用失败 fds为NULL、fd无效(EBADF)、参数无效(EINVAL)、无内存(ENOMEM)

Type definitions

nfds_t

typedef unsigned long nfds_t;

使用说明

作为poll接口的第二个参数类型,表示pollfd数组中的元素个数。

pollevent_t

typedef unsigned int pollevent_t;

使用说明

作为struct pollfd中events和revents成员的类型,表示poll事件标志位。

Structures

struct pollfd

struct pollfd {
    int fd;               /* The descriptor being polled */
    sem_t *sem;           /* Pointer to semaphore used to post output event */
    pollevent_t events;   /* The input event flags */
    pollevent_t revents;  /* The output event flags */
    void *priv;           /* For use by drivers */
};

成员说明

成员名称 数据类型 描述
fd int 被监视的文件描述符
sem sem_t * 指向用于发布输出事件的信号量指针
events pollevent_t 输入事件标志,指定感兴趣的事件类型
revents pollevent_t 输出事件标志,由内核填充实际发生的事件类型
priv void * 驱动私有数据指针

Macros

POLLIN

#define POLLIN     0x001

POLLPRI

#define POLLPRI    0x002

POLLOUT

#define POLLOUT    0x004

POLLERR

#define POLLERR    0x008

POLLHUP

#define POLLHUP    0x010

POLLNVAL

#define POLLNVAL   0x020

POLLRDNORM

#define POLLRDNORM 0x040

POLLRDBAND

#define POLLRDBAND 0x080

POLLWRNORM

#define POLLWRNORM 0x100

POLLWRBAND

#define POLLWRBAND 0x200

POLLMSG

#define POLLMSG    0x400

POLLRDHUP

#define POLLRDHUP  0x2000