码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-02 10:49:30      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:系统时间   eval   write   高效   str   记录   seconds   信号   告诉   

       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

标签:系统时间   eval   write   高效   str   记录   seconds   信号   告诉   

原文地址:https://www.cnblogs.com/yangxinrui/p/12393875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!