跳转到内容

C 编程/POSIX 参考/unistd.h/select

来自维基教科书,开放的书籍,共建一个开放的世界

select 是一个 系统调用应用程序编程接口 (API) 用于 类 UnixPOSIX 兼容的操作系统,用于检查 文件描述符 的状态,即打开的输入/输出通道。select 系统调用类似于 UNIX System V 及其后来的操作系统中引入的 poll 功能。

C 编程语言 源代码中,select 系统调用在头文件 sys/select.h 或 unistd.h 中声明,语法如下

int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* errorfds, struct timeval* timeout);
参数 描述
nfds 所有集合中最大文件描述符加 1
readfds fd_set 类型,包含要检查是否可读的文件描述符,并在输出中指示哪些文件描述符可读。可以为 NULL。
writefds fd_set 类型,包含要检查是否可写文件描述符,并在输出中指示哪些文件描述符可写。可以为 NULL。
errorfds fd_set 类型,包含要检查是否有待处理的错误条件的文件描述符,并在输出中指示哪些文件描述符有待处理的错误条件。可以为 NULL。
timeout struct timeval 类型结构,指定选择完成的最大等待时间间隔。如果 timeout 参数指向一个成员为 0 的 struct timeval 类型对象,select() 不会阻塞。如果 timeout 参数为 NULL,select() 将阻塞,直到事件导致其中一个掩码返回一个有效(非零)值。

fd_set 类型 参数可以使用四个实用程序宏进行操作:FD_SET()、FD_CLR()、FD_ZERO() 和 FD_ISSET()。

Select 返回 readfdswritefdserrorfds 中设置的位总数,如果超时则返回 0,如果出错则返回 -1。

select 中使用的文件描述符集的大小是有限的,具体取决于操作系统。更新的系统调用 poll 提供了更灵活的解决方案。

另请参阅

[编辑 | 编辑源代码]
[编辑 | 编辑源代码]
华夏公益教科书