日期:2014-05-16  浏览次数:20666 次

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.