美文网首页
浅谈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