标签:select 修改 失败 int timeval eval null 结构 事件
1 #include <sys/select.h>
2 int select(int maxfdps, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);
maxfdps:被监听的文件描述符(fd)的数量;
readset:结构指针类型(readset指向一个结构体),该结构体仅包含一个内置的整型数组,表示可读事件对应的fd集合,该数组中的每一位(bit)标记一个fd。由于fd集合是用内置数组表示的,所以能够容纳的fd的数量有限,限制了select能够同时处理的fd的数量;
writeset(可写事件),exceptset(异常事件)同上;
timeout:结构指针类型,设置select函数的超时时间,该结构体包含两个long型变量,分别表示表示秒数和微秒数。
返回值:给timeout的两个成员变量均传递0,select立即返回;传递NULL,select一直阻塞,直到某个fd就绪或者程序捕获到一个信号时,select才返回。
select成功,返回就绪的fd(含可读,可写和异常事件对应的fd)的数量(超时时间内没有fd就绪,返回0);
select失败,返回-1。
应用程序调用select函数时,传入感兴趣的fd和超时时间,select调用返回时,内核修改fd_set数组通知应用程序哪些fd已经就绪,修改timeval的成员通知应用程序阻塞了多久。
采用一系列宏来访问fd_set中的位:
1 #include <sys/select.h>
2 int FD_ZERO(int fd, fd_set *fdset); //清除所有位,置0int FD_CLR(int fd, fd_set *fdset); //清楚某一位fd,置0
3 int FD_SET(int fd, fd_set *fd_set); //设置某一位fd,置1
4 int FD_ISSET(int fd, fd_set *fdset); //测试某一位fd是否被置1
标签:select 修改 失败 int timeval eval null 结构 事件
原文地址:https://www.cnblogs.com/yongjin-hou/p/14348786.html