标签:文件 stFdr 多路复用 响应 描述符 IO 集合 NULL
步骤:
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。