---
title: select
description: "**select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)**"
url: https://www.hikunpeng.com/document/detail/zh/knet/api/docs/zh/api/posix_apis/select.md
sourcePath: /source/zh/knet/api/docs/zh/api/posix_apis/select.md
indexId: 455bbc45d1ccd94489bc0f1686f8fed0929f05585774c586f1e00051cb53ea9452
---
# select

## 接口名称

**select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)**

## 接口描述

一段指定时间内，侦听用户感兴趣的文件描述符的可读、可写和异常事件。

> [!NOTE]说明
>只支持轮询侦听。调用select期间，select会占用100%的CPU。

## 参数说明

|参数|说明|备注|
|--|--|--|
|nfds|集合中所有文件描述符的范围，即所有文件描述符的最大值加1|最大值是1024。|
|*readfds|待监测读取操作的文件描述符集合|支持为NULL。包含了需要检查是否可读的描述符，输出时表示哪些描述符可读。|
|*writefds|待监测写入操作的文件描述符集合|支持为NULL。包含了需要检查是否可写的描述符，输出时表示哪些描述符可写。|
|*exceptfds|待监测异常条件的文件描述符集合|支持为NULL。包含了需要检查是否出错的描述符，输出时表示哪些描述符出错。|
|*timeout|一个时间结构体，用来设置超时时间|仅支持到ms级精度。为NULL时，为阻塞永久等待。|

## 返回值

类型：int

- 正数：就绪的文件描述符的个数，表示成功
- 0：表示在达到超时之前，没有准备好的文件描述符
- -1：表示失败，并设置errno以指示错误类型

## 错误码

|错误码|描述|
|--|--|
|EINVAL|入参timeout无效；入参nfds小于0或大于FD_SETSIZE。|
|ENOMEM|mbuf内存申请失败。|
|EINTR|被信号中断。|
|ELIBBAD|系统符号加载失败|
|ENOMEM|系统内存申请失败。|
