浅谈IO多路复用

这篇文章主要讲述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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文摘抄自linux基础编程 IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作。那么我们对与外部设...
    VD2012阅读 4,578评论 0 2
  • 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半相关与全相...
    VD2012阅读 7,138评论 0 5
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,942评论 0 5
  • IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞 同步(synchronous)...
    可笑的黑耀斑阅读 4,937评论 0 2
  • 文/小鑫馨 记得小时候“恨”过一些人:欺负我们小孩的大孩子,欺负我年纪小骗我钱的卖肉夹馍的叔叔,以及不分青红皂白就...
    仙肚瑞拉阅读 1,540评论 0 2