共计 434 个字符,预计需要花费 2 分钟才能阅读完成。
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 位是否被设置
正文完