__FD_ISSET宏功能如何工作

时间:2015-06-01 13:21:18

标签: c linux macros

sys / select.h中有一个宏定义,它是GNU C Library的一部分,如下所示

#define __FD_ISSET(d, set) \
  ((__FDS_BITS (set)[__FD_ELT (d)] & __FD_MASK (d)) != 0)

有人可以解释第二行是如何实际扩展的以及它是如何工作的吗? __FDS_BITS / __ FD_ELT / __ FD_MASK定义在哪里? (他们是自己的宏吗?)

1 个答案:

答案 0 :(得分:0)

在我的系统(Debian / GNU Linux)上,它被定义为:

# define __FDS_BITS(set) ((set)->__fds_bits)
#define __FD_ELT(d) ((d) / __NFDBITS)
#define __FD_MASK(d)    ((__fd_mask) 1 << ((d) % __NFDBITS))

你可以在手册中找到什么FD_ISSET(男人FD_ISSET,或男人2选择)