码迷,mamicode.com
首页 > 其他好文 > 详细

fd_set的具体实现过程

时间:2015-04-09 17:29:53      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:fd-set

fd_set的实现详细原理


define FD_SETSIZE      1024
typedef unsigned long   fd_mask;
#define NBBY    8               /* number of bits in a byte */
#define NFDBITS (sizeof(fd_mask) * NBBY)        /* bits per mask */
#define howmany(x, y)   (((x) + ((y) - 1)) / (y))
typedef struct fd_set {
        fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
} fd_set;
#define _fdset_mask(n)  ((fd_mask)1 << ((n) % NFDBITS))
#define FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= _fdset_mask(n))
#define FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~_fdset_mask(n))
#define FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & _fdset_mask(n))
#define FD_COPY(f, t)   bcopy(f, t, sizeof(*(f)))
#define FD_ZERO(p)      bzero(p, sizeof(*(p)))

假如有如下定义:

fd_set read_set;

FD_SET(600,read_set);

那么最终的推导如下:
=> read_set->fds_bits[(600 + 32 - 1)/32] |= (1<<(600%32));

fd_set的具体实现过程

标签:fd-set

原文地址:http://blog.csdn.net/jxnu_xiaobing/article/details/44961733

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!