UNP——第六章,多路转接IO——select

Posted yangxinrui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UNP——第六章,多路转接IO——select相关的知识,希望对你有一定的参考价值。

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

    struct timeval {
        long tv_sec; /* seconds */
        long tv_usec; /* microseconds */
        };

nfds

最大文件描述符+1

通过告诉内核最多需要检查的文件描述符数量,以提高效率,(否则内核需要检查所有的文件描述符)

至于为什么是最大文件描述符值+1,表示 需要检查的文件描述符的数量,原因是 文件描述符从0开始,而数量从1 开始。

 

readfds, writefds, exceptfds

都是传入传出参数

通过位掩码的方式表示监听的文件描述符

      void FD_CLR(int fd, fd_set *set);
       int  FD_ISSET(int fd, fd_set *set);
       void FD_SET(int fd, fd_set *set);
       void FD_ZERO(fd_set *set);

 

timeout

可以选择:

一直阻塞,直到有事件触发

阻塞一段时间,直到有事件触发

不阻塞,立即返回

阻塞可能被信号处理中断,而timeout不是传出参数,所以timeout不会记录剩余的等待时间,而是使用上次的值调用。

如果需要剩余的等待时间,可以在select调用前后记录系统时间以计算。

 

以上是关于UNP——第六章,多路转接IO——select的主要内容,如果未能解决你的问题,请参考以下文章

五种高阶IO模型以及多路转接技术(selectpoll和epoll)及其代码验证

五种高阶IO模型以及多路转接技术(selectpoll和epoll)及其代码验证

五种高阶IO模型以及多路转接技术(selectpoll和epoll)及其代码验证

多路转接(IO复用)接口介绍

I/O多路转接之select和非阻塞IO

IO多路转接 ——— selectpollepoll