加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

总结一下三个io复用函数

发布时间:2020-12-14 04:36:57 所属栏目:大数据 来源:网络整理
导读:1.select int select ( int nfds,fd_set *readfds,fd_set * writefds,fd_set *exceptfds, struct timeval *timeout); 1)nfds为被监听文件描述符的总数,通常为个数+1 2)struct fd_set由定义来看__fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];包含一个整

1.select  

int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout);

1)nfds为被监听文件描述符的总数,通常为个数+1

2)struct fd_set由定义来看__fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];包含一个整形数组,其中每个位代表着一个文件描述符,这代表了读文件描述符的集合。需要注意的是,监听文件描述符的最大数由fd_setsize决定,其最大值是1024。

3)代表写文件描述符的集合。

4)异常文件描述符的集合。

5)struct timeout结构

struct timeval
  {
    __time_t tv_sec;        /* Seconds.  */
    __suseconds_t tv_usec;    /* Microseconds.  */
  };

第一个成员为秒,第二个成员为微妙,可见提供到微妙的支持。如果该结构指定为null,则一直阻塞此函数直到有事件发生。

6)return:成功返回0,失败返回-1并置errno。

7)提供以下宏函数代替位的繁琐操作

#define    FD_SET(fd,fdsetp)    __FD_SET (fd,fdsetp)  //将文件描述符置位,相当于加入到该集合当中。
#define    FD_CLR(fd,fdsetp)    __FD_CLR (fd,fdsetp)  //清除该文件描述符上的位,相当于从集合中取出。
#define    FD_ISSET(fd,fdsetp)    __FD_ISSET (fd,fdsetp)  //判断文件描述符是否在其中
#define    FD_ZERO(fdsetp)        __FD_ZERO (fdsetp)  //将该文件描述符清零。

8)更要注意的是,在向内核注册事件,通知完该事件之后,一定要重新注册一遍,即fd_set需要重新FD_SET进文件描述符。因为只能监听3个事件,读写异常,所以限制较多。

2.poll

int poll(struct pollfd *fds,nfds_t nfds,int timeout);

1)struct pollfd结构

               int   fd;         /* file descriptor */
               short events;     /* requested events */
               short revents;    /* returned events */
           };

  1.1)events是需要在该文件描述符上监听的事件,通常是下列宏的位掩码:

              POLLIN               //该文件描述符有数据可读
             There is data to read. POLLPRI        //紧急数据(oob) There is urgent data to read (e.g.,out-of-band data on TCP socket; pseudoterminal master in packet mode has seen state change in slave). POLLOUT        //写的缓冲区现在不阻塞了,可以该描述符写东西 Writing now will not block. POLLRDHUP (since Linux 2.6.17)    //仅linux支持,文件描述符对方关闭了写,或者关闭了连接,这个很有必要知道 Stream socket peer closed connection,or shut down writ

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读