define FD_SETSIZE
typedef unsigned long
#define NBBY
#define NFDBITS (sizeof(fd_mask) * NBBY)
#define howmany(x, y)
typedef struct fd_set
} fd_set;
#define _fdset_mask(n)
#define FD_SET(n, p)
#define FD_CLR(n, p)
#define FD_ISSET(n, p)
#define FD_COPY(f, t)
#define FD_ZERO(p)
从定义来分析,fd_set是一个unsigned long数组,改数组的下标是howmany(FD_SETSIZE, NFDBITS)。
unsigned long是一个32位的数据可以和32个文件描述符一一对应,即每一个fd_set的数组变量其实是表示32个文件描述符的标志。
当我们传入文件描述符(fq)的时候,内核将文件描述数对32取整这样找到fd_set的数组下标,同时将改数组下标中对应的数据进行偏移并置为1,这样就达到了标记改文件描述符的目的。