美文网首页
浅谈IO多路复用

浅谈IO多路复用

作者: 陈道乐 | 来源:发表于2018-11-04 01:16 被阅读0次

这篇文章主要讲述select的使用,selcet的优点在于, 它是POSIX所规定的, 所有正常的操作系统都是有的。 说白了, 就是通用, 通用, 通用

select

原型

/**
* @param {int}     nfds      需要检查的文件描述符个数
* @param {fd_set*} readset   用来检查可读性的一组文件描述符
* @param {fd_set*} writeset  用来检查可写性的一组文件描述符
* @param {fd_set*} exceptset 用来检查是否有异常的一组文件描述符
* @param {timeval*} 超时时间, 填写NULL的时候表示堵塞,
填写0为非堵塞,其他为超时时间
* @retun {int} 发生错误时,返回SOCKET_ERROR
**/
int select(int nfds, fd_set* readset, fd_set* writeset, fd_set* exceptset, struct timeval* timeout)

fd_set

fd_set其实是一个数组的宏定义, 实际上是一个long类型的数组, 存放的是文件描述符(文件句柄)

  • FD_SET //添加文件描述符
  • FD_CLR // 清空文件描述符
  • FD_ISSET // 判断对应的文件描述符是否存在
  • FD_ZERO //将fd_set 全部清零

范例 1

FD_SET(int fd, fd_set *fdset);       //将fd加入set集合
FD_CLR(int fd, fd_set *fdset);       //将fd从set集合中清除
FD_ISSET(int fd, fd_set *fdset);     //检测fd是否在set集合中,不在则返回0
FD_ZERO(fd_set *fdset);              //将set清零使集合中不含任何fd

相关文章

网友评论

      本文标题:浅谈IO多路复用

      本文链接:https://www.haomeiwen.com/subject/mvalxqtx.html