您的位置:首页 > 编程语言

这是把fd_set相关的源代码汇总在一起。这样应该知道fd_set的实现详细原理

2014-07-12 09:30 429 查看
这是把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 master_set_read;

FD_SET(600,master_set_read);

=> master_set_read->fds_bits[(600)/32] |= (1<<(600%32));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: