Linux 中 select 函数问题 !!!!!!!!!!!!!!
如下:
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号描述符。
------解决方案--------------------一般情况下,程序最大可以打开1024个描述符号,如果让select对这1024个都进行检查,毫无疑问性能比较低下。所以select中的第一个参数就是检查描述符的个数。如果你的程序里面的最大描述符是8,那么select应该检查0-8共9个描述符。也就是说该个数应该是你的最大描述符+1.