select机制的原理

应用程序中最广泛用到的是 BSD UNIX 中引入的 select()系统调用,其原型如下

int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *timeout);

  其中 readfdswritefdsexceptfds 分别是被 select()监视的读、写和异常处理的文件描述符集合,numfds 的值是需要检查的号码最高的文件描述符加 1timeout 参数是
一个指向 struct timeval 类型的指针,它可以使 select()在等待 timeout 时间后若没有文件描述符准备好则返回 
timeval 结构体定义

struct timeval
{
    int tv_sec; /* 秒 */
    int tv_usec; /* 微妙 */
};
下列操作用来设置、清除、判断文件描述符集合。
FD_ZERO(fd_set *set)
清除一个文件描述符集。
FD_SET(int fd,fd_set *set)
将一个文件描述符加入文件描述符集中。
FD_CLR(int fd,fd_set *set)
将一个文件描述符从文件描述符集中清除。
FD_ISSET(int fd,fd_set *set)
判断文件描述符是否被置位

由于调用select的时候,每个驱动的poll函数接口都会被调用到,实际上执行select的进程被挂到了每个驱动的等待队列上。可以被任何一个驱动唤醒  



posted on 2018-09-10 13:07  紫枫术河  阅读(1875)  评论(0)    收藏  举报

导航