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的进程被挂到了每个驱动的等待队列上。可以被任何一个驱动唤醒  




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM