linux socket select 函数分析

linux socket select 函数分析
原文地址:http://www.manpagez.com/man/2/FD_SET/

     #include <sys/select.h>
void
FD_CLR(fd, fd_set *fdset);
void
FD_COPY(fd_set *fdset_orig, fd_set *fdset_copy);
int
FD_ISSET(fd, fd_set *fdset);
void
FD_SET(fd, fd_set *fdset);
void
FD_ZERO(fd_set *fdset);
int
select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds,
fd_set *restrict errorfds, struct timeval *restrict timeout);
首先分析一下 fd_set, fd_set 即file descriptor set,它是集合,在它里面可以保存多个file descriptor,即文件描述符。
所以 ,FD_SET函数就是把第一个参数fd 这个文件描述符放到   fd_set所指的这个集合中。
其他的几个函数(除了select 函数)看函数名就能明白了。

下面说一下select 函数的理解,

select 函数是用来测试判断的(估计描述的不准确),它测试 readfds, writefds ,errorfds 这几个fd_set中是否有相应的处于ready 状态的file descriptors.   如果有,select 的返回值就是处于ready 状态下的read, write , error pending的
file descrptors 的总数。 如果没有,则返回0, 如果出错,返回-1.
nfds: 是要测试的每一个fd_set中的开始nfds个file descriptors.
比如, read fd set 中有3个descriptors, write fd set 有5 个descriptors, ... ,nfds为2的话, 那就是各测试readfds, writefds,和errorfds的前面2个desctriptors.

select 执行结束,readfds ,writefds, errorfds被处于ready状态下的file descriptors set替换掉了。

以上就是我的理解,还望纠正,不胜感激。
今后将陆续翻译一些linux 开发方面API技术文档,不过不会纯粹的翻译,只是自己的读过后理解而已。


 参考网站:http://rhoden.id.au/doc/sockets2.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值