其他分享
首页 > 其他分享> > IO多路复用

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