poll
poll 提供基于文件描述符的 I/O 多路复用机制,支持同时监视多个文件描述符上的可读、可写及异常事件,并支持超时等待。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| poll | 监视文件描述符集合上的I/O事件 |
Functions
poll
头文件清单
功能说明
- 等待一组文件描述符上的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
使用说明
作为poll接口的第二个参数类型,表示pollfd数组中的元素个数。
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 * | 驱动私有数据指针 |