結構體原型:
typedef struct{/*XPG4.2requiresthismembername.Otherwiseavoidthenamefromtheglobalnamespace.*/#ifdef__USE_XOPEN__fd_maskfds_bits[__FD_SETSIZE/__NFDBITS];#define__FDS_BITS(set)((set)->fds_bits)#else__fd_mask__fds_bits[__FD_SETSIZE/__NFDBITS];#define__FDS_BITS(set)((set)->__fds_bits)#endif}fd_set;
常見用法:
fd_set set;
FD_ZERO(&set);/*將set清零使集合中不含任何fd*/
FD_SET(fd, &set); /*將fd加入set集合*/
FD_CLR(fd, &set); /*將fd從set集合中清除*/
FD_ISSET(fd, &set); /*在調用select()函式後,用FD_ISSET來檢測fd是否在set集合中,當檢測到fd在set中則返回真,否則,返回假(0)*/
以上式子中的fd為socket句柄。
示例:
#include <stdio.h>#include <sys/select.h>#include <unistd.h>int main(int argc, char **argv){ fd_set fdset; FD_ZERO (&fdset); /*清空集合中所有的元素*/ FD_SET(STDOUT_FILENO,&fdset); /*設定stdout,使集合中包含stdout*/ if(FD_ISSET(STDOUT_FILENO,&fdset)!=0) /*測試stdout是否包含在集合中*/ printf("stdout has been set\n"); else printf("stdout has not been set\n"); FD_CLR(STDOUT_FILENO,&fdset); /*從位向量中清除stdout*/ if(FD_ISSET(STDOUT_FILENO,&fdset)!=0) /*再次測試*/ printf("stdout has been set\n"); else printf("stdout has not been set\n"); return 0;}