linux socket select 函数分析
原文地址:http://www.manpagez.com/man/2/FD_SET/
所以 ,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
原文地址:http://www.manpagez.com/man/2/FD_SET/
#include <sys/select.h>首先分析一下 fd_set, fd_set 即file descriptor set,它是集合,在它里面可以保存多个file descriptor,即文件描述符。
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 这个文件描述符放到 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