一、select函数
#include <sys/time.h>
#include <unistd.h>
int select(
int maxfd, //监听的文件描述里最大的一个+1
fd_set * readfds, //可读事件文件描述符集合
fd_set * writefds, //可写事件文件描述符集合
struct timeval * timeout //函数监听时间 写 NULL 则变成阻塞等待
);
注意:select函数发现有读写事件的描述符后,会将没反应的文件描述符从集合中清除
1、fd_set 结构体
把他看成是一个整形数组,该整型数组中的每一个元素都是一个文件描述符,并且有最大数量,一般不要超过1024。
官方提供了四个宏
FD_SET
int fd = open("a.txt",O_CREATE|O_RDONLY,0644); //获取一个文件描述符
fd_set se; //声明描述符集合
FD_SET(fd,&se); //将fd这个文件描述符 添加到 文件描述符集合中
该宏用于将文件描述符添加到文件描述符集合中
FD_CLR
int fd = open("a.txt",O_CREATE|O_RDONLY,0644); //获取一个文件描述符
fd_set se; //声明描述符集合
FD_CLR(fd,&se); //将fd从文件描述符集合se中清除
该宏的作用为:将某一个文件描述符从集合中清除
FD_ZERO
FD_ZERO(&se); //清空集合se中的所有位
该宏的作用为:清空文件描述符集合
FD_ISSET
fd_set se;
FD_ISSET(fd,&se);
该宏的作用为:用于测试指定的文件描述符是否在该集合中
二、select函数优缺点
优点:跨平台 win32、win64都支持
缺点:1、fd_set(1024) : 数组,静态分配空间,固定大小1024
2、轮询:全盘轮询,效率是多路复用里最低的
剩下内容后面有时间补上