select在WIN32和linux的实现
来源:互联网 发布:淘宝模特一分钟摆姿势 编辑:程序博客网 时间:2024/05/18 01:30
select在win32下和linux下实现是不一样的,由其是fd_set这个数据结构的构造.
linux下select的实现
select中的第一个参数,是给系统内部用的, nfds is the highest-numbered file descriptor in any of the three sets, plus 1.
win32下select的实现
宏FD_SET的实现
#define FD_SET(fd, set) do { \
u_int __i; \
for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
if (((fd_set FAR *)(set))->fd_array[__i] == (fd)) { \ // 遍历set的集合中,找到是否已经FD_SET该fd,找到后退出循环,继续下面的操作.
break; \
} \
} \
if (__i == ((fd_set FAR *)(set))->fd_count) { \ // 如果没有找到已经 FD_SET的fd,判断该fd<FD_SETSIZE后,在fd_set的数据组加入该fd,并且fd_set中fd_count加1
if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
((fd_set FAR *)(set))->fd_array[__i] = (fd); \
((fd_set FAR *)(set))->fd_count++; \
} \
} \
} while(0)疑问:在如下条件下,set中已经FD_SET一个描述符fd=3(0,1,2是stdout,stdin,stderr),此时fd_count==1,第二次再次FD_SET该描述符fd=3,第一次遍历时已经找到了fd_array[__i==0]=3, 此时__i==1,__i==fd_count,此时fd=3又加到set中去了,fd_array[__i==1]=3,fd_count=2.
一个集合中就出来了存在两个相同的fd,
- select在WIN32和linux的实现
- OpenFileDialog 在Win32、MFC、C#的实现
- Linux的poll和select
- Linux : select()详解 和 实现原理
- select和poll服务器实现(Linux)
- Linux select 实现并发服务器和客户端
- Linux : select()详解 和 实现原理【转】
- win32 和 linux的相关API
- Linux网络编程select模型的实现
- Linux select实现的TCP echo
- Linux网络编程select模型的实现
- Linux网络编程select模型的实现
- linux下的select函数和一种并发服务器的实现
- 在win32里实现COM
- Win32全局钩子在Delphi下实现的关键技术
- Win32全局钩子在Delphi下实现的关键技术
- Win32全局钩子在Delphi下实现的关键技术
- select 和 epoll的编程实现区别
- 设计模式之三:Bridge模式
- hdu 1358 Period
- 传统的过程性编程与OOP编程的区别
- 当你对未来迷茫的时候请看看
- 29万 个Android恶意软件,Windows花了十四年才达到这个数量!
- select在WIN32和linux的实现
- 字典树模版(递归)
- 修改表的约束条件及默认索引的处理
- 面试100题系列之3一种关于拆分思路的算法
- C++ 虚函数表解析
- windows下RMagick的安装
- mysqldump全备的shell脚本分享
- 蒜的生命周期【观察日记】
- 判断一个整型数组是否包含另外一个数组(未使用异常类的情况下)