select函数小总结

在看《unix系统编程》、《unix网络编程》的时候,都遇到了select这个函数

#inclde <sys/select.h>
#inclde <sys/time.h>
int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, constant struct timeval *timeout);
  

首先来看第一个参数maxfd1,指定待测试的描述符的个数,他的值为待测试的最大描述符+1

  

中间的三个参数readset、writeset、exceptse分别指定我们让内核测试读、写、异常的描述符!事实上,select函数监视的是一组文件描述符的集,而这些文件秒素符集存放在一个数组中,而这个数组的实现,隐藏在函数名为fd_set的数据类型和下面的几个宏

void FD_ZERO(fd_set *fdset)               //清空fdset所有的位
void FD_SET(int fd, fd_set *fdset)         //将一个描述符加入到fdset中
void FD_CLR(int fd, fd_set *fdset)          //从fdset中移除一个文件描述符
int FD_ISSET(int fd, fd_set *fdset)         //检查一个fd是否在fdset中
  

下面,假设我们要使用select函数来read两个文件:

int maxfdp1, fd1, fd2;
fd_set rset;
FD_SET(fd1, &rset);
FD_SET(fd2, &rset);
maxfdp1 = max(fd1, fd2) + 1;
if (FD_ISSET(fd1, &rset))
     do something;
if (FD_ISSET(fd2, &rset))
     do something;
  

^_^,基本上都是Stevens先生的书上的!

你可能感兴趣的:(select函数小总结)