I/O复用使得程序可能同时监听和解决多个文件描述符,进步程序的效率。支流的零碎调用次要有select,poll和epoll。
select
零碎调用原型
int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* expectfds, struct timeval* timeout);
其中,nfds为select监听的最大文件描述符个数+1,fd_set是一个数据结构,其本质上是一个整形数组,数组中的每一个位都标记一个文件描述符,而fd_set的容量是由内核决定的,即select能同时解决的文件数量是无限的。
fd_set操作的一些宏定义:
- FD_ZERO(fd_set *fdset) —— 革除fdset所有的位
- FD_SET(int fd, fd_set *fdset) —— 设置fd位
- FD_CLR(int fd, fd_set *fdset) —— 革除fd位
- int FD_ISET(int fd, fd_set *fdset) —— 测试fd位是否被设置