付费推广网站,正鹏建设工程有限公司网站,如何搭建网站赚钱,网站研发系统调用 select()可用于执行 I/O 多路复用操作#xff0c;调用 select()会一直阻塞#xff0c;直到某一个或多个文件描述符成为就绪态#xff08;可以读或写#xff09;。其函数原型如下所示#xff1a;
#include sys/select.h
int select(int nfds, fd_set *re…系统调用 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()