1. select函数

select的作用:

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

头文件

#include <sys/time.h>   //for struct timeval
#include <unistd.h> //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_set
FD_SET(socket, &rdfds); //将要检测的socket描述符加入到fd_set集合中 tv.tv_sec = 2;
tv.tv_usec = 1000; //设置超时时间为2s+1ms rtn = 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. 未完待续

select函数用法详解的更多相关文章

  1. SQL中CONVERT()函数用法详解

    SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft® SQL Server ...

  2. php中setcookie函数用法详解(转)

    php中setcookie函数用法详解:        php手册中对setcookie函数讲解的不是很清楚,下面是我做的一些整理,欢迎提出意见.        语法:        bool set ...

  3. eval()函数用法详解

    eval()函数用法详解:此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval()函数的用法.语法结构: eval(str) 此函数可以接受一个字符串str作为参数, ...

  4. 转载 LayoutInflater的inflate函数用法详解

    http://www.open-open.com/lib/view/open1328837587484.html LayoutInflater的inflate函数用法详解 LayoutInflater ...

  5. delphi中Application.MessageBox函数用法详解

    delphi中Application.MessageBox函数用法详解 Application.MessageBox是TApplication的成员函数,声明如下:functionTApplicati ...

  6. C语言对文件的操作函数用法详解2

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const  ...

  7. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

  8. python开发笔记之zip()函数用法详解

    今天分享一篇关于python下的zip()函数用法. zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素按顺序组合成一个tuple,每个tuple中包含的是原 ...

  9. thinkPHP内置字符串截取msubstr函数用法详解

    作者:陈达辉 字体:[增加 减小] 类型:转载 时间:2016-11-15 我要评论 这篇文章主要介绍了thinkPHP内置字符串截取函数用法,结合实例形式分析了thinkPHP内置的字符串截取函数功 ...

随机推荐

  1. poj 2886 线段树的更新+反素数

    Who Gets the Most Candies? Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , ...

  2. unidbgrid单元格操作

    unidbgrid单元格操作 //GRID里回车替换TABfunction cellkeydown(sender, td, cellIndex, record, tr, rowIndex, e, eO ...

  3. 纯净得只剩下字的访问IP查询API

    纯净得只剩下字的访问IP查询API 实用资源 / 2018-02-26 / 3 条评论 看到一个好玩的,就随手收藏一下,本API作用:获取用户真实IP,而获取用户IP常见的坑有两个,开发支付的时候也需 ...

  4. 利用github搭建个人maven仓库

    之前看到有开源项目用了github来做maven仓库,寻思自己也做一个.研究了下,记录下. 简单来说,共有三步: deploy到本地目录 把本地目录提交到gtihub上 配置github地址为仓库地址 ...

  5. SQLSqlserver中如何将一列数据,不重复的拼接成一个字符串

    把一列数据拼接成一个字符串比较简单: declare @test varchar(500) set @test=''; select @test=@test+name+',' from person ...

  6. 【推荐】介绍两款Windows资源管理器,Q-Dir 与 FreeCommander XE(比TotalCommander更易用的免费资源管理器)

    你是否也像我一样,随着硬盘.文件数量的增加,而感到对于文件的管理越来越乏力. 于是我试用了传说中的各种软件,包括各种Explorer外壳,或者第三方资源管理器. 最后我确定下来经常使用,并推荐给您的是 ...

  7. MariaDB 数据类型与运算符(4)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  8. mysql 存储过程 游标嵌套

    基本表temp 包括 name, type, sendCity, getCity 分别对应物流送货司机名, 倒车的第几段, 发货城市, 收货城市 表结构 -- -------------------- ...

  9. cmd命令关闭占用程序的端口

    遇到的问题: 在重新启动tomcat服务时,启动失败,显示的信息大概为:Error running 'cus_manager_system': Unable to open debugger port ...

  10. (转)Python3 模块3之 Urllib之 urllib.parse、urllib.robotparser

    原文:https://blog.csdn.net/qq_36148847/article/details/79153738 https://blog.csdn.net/zly412934578/art ...