slect fd_set

丶灬走出姿态 提交于 2019-11-27 21:07:08

select()机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执行了select()的进程哪一socket或文件发生了可读或可写事件 

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 <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;
}

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!