网站建站方案seo网站建设是什么意思
系统调用 select()可用于执行 I/O 多路复用操作,调用 select()会一直阻塞,直到某一个或多个文件描述符成为就绪态(可以读或写)。其函数原型如下所示:
#include <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
⚫ 参数nfds通常表示最大文件描述符编号值+1,考虑 readfds、writefds 以及 exceptfds
这三个文件描述符集合,在 3 个描述符集中找出最大描述符编号值,然后加 1;
参数 readfds、writefds 以及 exceptfds 都是 fd_set 类型指针,
指向一个 fd_set 类型对象,fd_set 数据类型是一个文件描述符的集合体,所以参数readfds、writefds 以及exceptfds 都是指向文件描述符集合的指针,这些参数按照如下方式使用:
⚫ readfds :传入传出参数:是用来检测读是否就绪(是否可读)的文件描述符集合;
⚫ writefds:传入传出参数: 是用来检测写是否就绪(是否可写)的文件描述符集合;不使用可以指定为NULL
⚫ exceptfds :传入传出参数:是用来检测异常情况是否发生的文件描述符集合。不使用可以指定为NULL
Tips:异常情况并不是在文件描述符上出现了一些错误。
Linux 提供了四个宏用于对 fd_set 类型对象进行操作,所有关于文件描述符集合的操作都是通过这四个宏来完成的:FD_CLR()、FD_ISSET()、FD_SET()、FD_ZERO()