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

关于fd_set和fd_isset的疑惑
看了百度说,
fd_set(fd,&fdset) // 将文件描述符fd放入集合fdset中
fd_isset(fd,&fdset)  //判断文件描述符是否在集合fdset中

然后,看到很多select的应用程序都是这样写的。

fd_clr(&fdset);  //首先清空fdset集合
fd_set(fd,&fdset);  //将待检测描述符放入fdset集合中

select(n+1,&fdset,null,null,null);  //判断fdset集合中是否有动作

//然后fd_isset再判断fd在不在fdset中
fd_isset(fd,&fdset);  // 

我的疑问就产生了,既然select之前的fd_set已经将fd放入了fdset集合之中,那么select之后,
再去检测判断fd_isset是否fd在fdset集合之中还有意义么?已经先期把fd放入了fdset中了,
然后后面又去判断是否在,这个是不是个伪命题呢?肯定都是在的啊?要不要select岂不是没作用了?
我的问题出现在哪里?我自己也很困惑,可能我对fd_set和fd_isset以及select的理解还不是很透彻,请高手
百忙之中点拨下,谢谢!
select??fd_set?? fd_isset

------解决方案--------------------
没有fd_set,select怎么知道该检测哪些描述符?