当前位置: 技术问答>linux和unix
Linux 中 select 函数问题 !!!!!!!!!!!!!!
来源: 互联网 发布时间:2016-01-30
本文导语: 如下: int Fd1; int Fd2; int MaxFd = (Fd1 > Fd2) ? Fd1 : Fd2; select (MaxFd + 1/*剩下的参数就不写了.*/); 第一个参数为什么要加这个1 不要告诉我这就是系统规定的,就得这么写. 我只是想知道原因. | 因为...
如下:
int Fd1;
int Fd2;
int MaxFd = (Fd1 > Fd2) ? Fd1 : Fd2;
select (MaxFd + 1/*剩下的参数就不写了.*/);
第一个参数为什么要加这个1
不要告诉我这就是系统规定的,就得这么写.
我只是想知道原因.
|
因为描述符的值是始于0的,select的第一个参数是指查看的个数。
假设你FD_SET的描述符值为5,则select需查看的个数为5+1即6,就是说从0查看到5号描述符。
假设你FD_SET的描述符值为5,则select需查看的个数为5+1即6,就是说从0查看到5号描述符。
|
一般情况下,程序最大可以打开1024个描述符号,如果让select对这1024个都进行检查,毫无疑问性能比较低下。所以select中的第一个参数就是检查描述符的个数。如果你的程序里面的最大描述符是8,那么select应该检查0-8共9个描述符。也就是说该个数应该是你的最大描述符+1.