IO多路复用
作者:互联网
步骤:
1、首先我们需要创建一张文件描述符集合表
fd_set stFdr;//大小为1024字符
FD_ZERO(&stFdr);//初始化集合表将表全置为0
2、 然后将我们打开的文件的文件描述符添加到这张表里面
FD_SET(n, &stFdr);//将文件描述符加入列表
3、 用select()函数监听所有通道情况,集合表里面的所有通道没有响应的话就阻塞(在最后一个参数置为NULL的时候阻塞生效)有响应的话将该通道对应的集合表对应的bit位置1,然后返回有响应的通道个数。
//函数功能:将有响应的置为1,若没有响应的就阻塞
//参数1:n+1是最大监控多少个从0开始算
// 一般是文件描述符中最大的那个+1
//参数2:所有要读的文件文件描述符的集合
//参数3:所有要写的文件文件描述符的集合
//参数4:其他文件描述符的集合
//参数5:超时设置,若为NULL则表示阻塞。
// 置为0的话只检测文件描述符的状态
// 非0的话在指定时间内监听,若在规定时间内没有响应则超时返回
//返回值:返回响应的数量
int ret = select(n+1, &stFdr,NULL,NULL,NULL);
if(ret <= 0)
{
continue;//不跳出循环继续执行
}
4、 当有响应的时候通过FD_ISSET()函数来判断是哪些通道的响应,进而执行某些对应的数据操作;
//函数功能:判断某一个通道的状态是否有响应
//参数1:文件描述符,
//参数2:描述符集合表地址;
//返回值:若有响应则返回1,没有返回0
FD_ISSET(n, &stFdr);
5、执行对应文件操作;
标签:文件,stFdr,多路复用,响应,描述符,IO,集合,NULL 来源: https://www.cnblogs.com/JinShanCheShen/p/16110694.html