当前位置: 技术问答>linux和unix
关于select的疑问
来源: 互联网 发布时间:2016-08-29
本文导语: 我们知道select函数返回的是准备好的描述符的个数,对于具体是哪个描述准备好读写了 我们该如何知道呢???多谢大牛解答啊! | 由变量fd_set *fdsets来获得,因此每次使用select都...
我们知道select函数返回的是准备好的描述符的个数,对于具体是哪个描述准备好读写了
我们该如何知道呢???多谢大牛解答啊!
我们该如何知道呢???多谢大牛解答啊!
|
由变量fd_set *fdsets来获得,因此每次使用select都要重新对fd_set *fdset变量进行初始化
int select (int maxfdp1, fd_set *readset, fd_set *writeset,
fd_set *exceptset, const struct timeval * timeout);
int select (int maxfdp1, fd_set *readset, fd_set *writeset,
fd_set *exceptset, const struct timeval * timeout);
|
FD_ISSET(fd, fds)
|
顶二楼
|
fd_set是文件句柄的集合。
FD_ZERO 清空这个集合;
FD_SET 往这个集合里面加入一个文件句柄;
FD_ISSET 查看某一个文件句柄是否被设置了;
其中,select的第二个参数是“可读”文件句柄的集合;
第三个参数是“可写”文件句柄的集合;经常使用的就是这两个参数。
你可以看一下select函数的说明,里面有的。
'fd_set') 是一组文件描述符(fd)的集合。由于fd_set类型的长度在不同平台上不同,因此应该用一组标准的宏定义来处理此类变量:
fd_set set; FD_ZERO(&set); /* 将set清零 */ FD_SET(fd, &set); /* 将fd加入set */ FD_CLR(fd, &set); /* 将fd从set中清除 */ FD_ISSET(fd, &set); /* 如果fd在set中则真 */ 在过去,一个fd_set通常只能包含少于等于32个文件描述符,因为fd_set其实只用了一个int的比特矢量来实现,在大多数情况下,检查fd_set能包括任意值的文件描述符是系统的责任,但确定你的fd_set到底能放多少有时你应该检查/修改宏FD_SETSIZE的值。*这个值是系统相关的*,同时检查你的系统中的select() 的man手册。有一些系统对多于1024个文件描述符的支持有问题。
FD_ZERO 清空这个集合;
FD_SET 往这个集合里面加入一个文件句柄;
FD_ISSET 查看某一个文件句柄是否被设置了;
其中,select的第二个参数是“可读”文件句柄的集合;
第三个参数是“可写”文件句柄的集合;经常使用的就是这两个参数。
你可以看一下select函数的说明,里面有的。
'fd_set') 是一组文件描述符(fd)的集合。由于fd_set类型的长度在不同平台上不同,因此应该用一组标准的宏定义来处理此类变量:
fd_set set; FD_ZERO(&set); /* 将set清零 */ FD_SET(fd, &set); /* 将fd加入set */ FD_CLR(fd, &set); /* 将fd从set中清除 */ FD_ISSET(fd, &set); /* 如果fd在set中则真 */ 在过去,一个fd_set通常只能包含少于等于32个文件描述符,因为fd_set其实只用了一个int的比特矢量来实现,在大多数情况下,检查fd_set能包括任意值的文件描述符是系统的责任,但确定你的fd_set到底能放多少有时你应该检查/修改宏FD_SETSIZE的值。*这个值是系统相关的*,同时检查你的系统中的select() 的man手册。有一些系统对多于1024个文件描述符的支持有问题。
|
恩,应该这样判断!