博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
select函数用法详解
阅读量:6912 次
发布时间:2019-06-27

本文共 1607 字,大约阅读时间需要 5 分钟。

1. select函数

select的作用:

轮询的方式,从多个文件描述符中获取状态变化后的情况。

头文件

#include 
//for struct timeval#include
//for select

函数原型

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

参数解释

  • nfds: 要检测的文件描述符的范围,为文件最大描述符+1
  • readfds: 包含所有可能因状态变成可读而触发select函数返回的文件描述符
  • writefds: 包含所有可能因状态变成可写而触发select函数返回的文件描述符
  • exceptfds: 包含所有可能因状态发生异常而触发select函数返回的文件描述符
void FD_CLR(int fd, fd_set *set);       //将fd在set中去除void FD_SET(int fd, fd_set *set);       //将fd添加到set中int  FD_ISSET(int fd, fd_set *set);     //检查set中fd是否有状态变化void FD_ZERO(fd_set *set);              //清空整个set
  • timeout:
struct timeval {     long    tv_sec;         /* seconds */     long    tv_usec;        /* microseconds */};

返回值

当超时或其中一个/多个文件描述符发生变化时,此函数将返回,返回值:

  • -1: 函数执行出错
  • 0: 超时,并将时间结构体清空为0
  • 0: 状态变化的文件描述符的个数

基本实例

fd_set rdfds;   struct timeval tv;int rtn = 0;FD_ZERO(&rdfds);     //清空fd_setFD_SET(socket, &rdfds);  //将要检测的socket描述符加入到fd_set集合中tv.tv_sec = 2;tv.tv_usec = 1000;      //设置超时时间为2s+1msrtn = select(socket+1, &rdfds, NULL, NULL, &tv);if(rtn < 0)    perror("select");else if(0 == rtn)    printf("timeout\n");else{    printf("rtn = %d\n", rtn);      //查看有多少个文件描述符发生了变化        if(FD_ISSET(socket, &rdfds))    //判断下这个socket是否状态真的变成了可读    {        recv(...);    }}

2. select做时间函数

void time_delay(int seconds){     struct timeval tv;    int err;        tv.tv_sec = seconds;     //超时时间    tv.tv_usec = 0;        do    {       err = select(0,NULL,NULL,NULL,&tv);  //将nfds设置为0即为超时函数    }while(err<0 && errno==EINTR);          //}

3. 未完待续

转载于:https://www.cnblogs.com/Jimmy1988/p/8782469.html

你可能感兴趣的文章
打破网络沉闷---QQ强制聊天工具再度现身!
查看>>
对Html5 Web App 的背景调查研究
查看>>
SQL GROUP BY 语句
查看>>
.NET 动态脚本语言Script.NET 开发指南
查看>>
根绝ip限制访问
查看>>
ubuntu下virtualbox配置host-only网络
查看>>
Windows Server 2008 IIS7.0 发布html和Asp.net网站
查看>>
分布式搜索方案选型
查看>>
简单介绍一些HTML代码(字幕、音频和视频)
查看>>
[深入浅出Cocoa]iOS网络编程之NSStream
查看>>
Cocos2d-html5 笔记2: director
查看>>
程序猿你是否有这些理解误区?
查看>>
C语言整理——文件系统和文件访问
查看>>
阿里面试
查看>>
ECSHOP修改后台地址
查看>>
运动补偿与运动估计
查看>>
jQuery的一个关键函数
查看>>
表单模型+安装目录+侵入表单模型
查看>>
系统如何端子app弄root才干
查看>>
HTML表格边框的设置小技巧
查看>>