【Linux高级IO】多路转接之select和poll

多路复用之select和poll

  • 一,认识select
    • 1. select函数
    • 2. select的执行过程
    • 3. select缺点
  • 二,了解poll
    • 1. poll函数
    • 2. poll的特点
  • 三,总结

对于多路转接,也叫多路复用,一共有3种方案,select,poll,epoll。这一节我们来看select和poll

一,认识select

select可以做到只负责等待,而不负责拷贝。同时等待多个文件描述符,一旦有哪个就绪,就会让read、write,send,recv接口去拷贝数据。也可以让read、write,send,recv接口不再阻塞等待,只负责拷贝

1. select函数

系统提供select函数来实现多路复用输入/输出模型

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

我们先来看一下参数部分:

  • 第一个参数 nfds 表示需要监视的最大的文件描述符值+1
  • readfds, writefds, exceptfds 分别对应于需要检测的可读文件描述符的集合,可写文件描述符的集 合及异常文件描 述符的集合;
  • 参数 timeout 为 结构timeval,用来设置 select() 的等待时间

对于等待时间的设置:

  • NULL:则表示select()没有timeout,select将一直被阻塞,直到某个文件描述符上发生了事件;
  • 0:仅检测描述符集合的状态,然后立即返回,并不等待外部事件的发生。
  • 特定的时间值:如果在指定的时间段里没有事件发生,select将超时返回

对于第二,三,四个参数,fd_set是一个系统提供的类型,其实也就是一个位图,里面可以设置你需要关系的文件描述符,然后交给select去监控哪个文件描述符已经就绪。

当然系统提供了一组操作fd_set的接口, 来比较方便的操作位图

void FD_CLR(

你可能感兴趣的:(Linux,linux,操作系统,多路复用)