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+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

select函数用法详解相关推荐

  1. select函数用法详解,及实例分析

    select函数是系统调用函数,用于多路监控.当没有一个文件满足要求时,select将阻塞调用进程.在有些情况下,采用select函数可以大大简化程序结构.比如一个系统有10个输入设备,如果想实时读取 ...

  2. linux之select函数用法详解

    select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的.程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变.   何为文件句 ...

  3. ROW_NUMBER() OVER()函数用法详解

    今天同事问了一个关于插入表的问题,对象:被插入表sys_equi_disorg   A  , 查询表sys_equi_dict   B 因为A表的ID不是自增的,并且不能更改表结构,主键默认值还是0, ...

  4. mysql 从第几位开始截取_mysql的截取函数用法详解

    原标题:mysql的截取函数用法详解 substring()函数 测试数据准备: 用法: 以下语法是mysql自动提示的 1:substirng(str,pos):从指定位置开始截取一直到数据完成 s ...

  5. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  6. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  7. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  8. SQL语句 SELECT LIKE用法详解

    在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...

  9. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

最新文章

  1. oracle闪回 分区,Oracle 闪回区(Oracle Flash recovery area)
  2. OpenStack七年盘点,热潮褪去后的明天在哪?
  3. C 函数 strstr 的高效实现
  4. linux shell脚本:通过API实现git仓库从gitee向gitlab的批量迁移(gitlab api)
  5. linux进行显卡配置修改什么游戏,配置好Linux显卡驱动 爽快玩游戏
  6. 我的docker随笔25:一个测试用的镜像制作过程
  7. Nginx之进程间的通信机制(信号、信号量、文件锁)
  8. Python正则表达式中的贪心模式和非贪心模式
  9. 解题报告 幸福的道路
  10. Python实现代码雨效果
  11. steam授权_恐怖游戏爱好者的福音!十一月Steam上最值得玩的恐怖游戏
  12. js/vue 动态获取浏览器宽度/高度
  13. 原生JAVA解析json
  14. i7-10750H和i7-8750H 对比哪个好
  15. RocksDB 笔记
  16. tpm_crb MSFT0101:00: [Firmware Bug]: ACPI region does not cover the entire command/re处理
  17. 通过shell脚本来rerun一个oozie调度失败的job,从而可以跳过执行失败的节点
  18. 如何给 SAP Commerce Cloud Site 设置默认语言
  19. 神舟战神Z8-CA5NP,RTX3060怎么样?测评值得买吗?详细性能点评
  20. js点击左右按钮来切换多张图片

热门文章

  1. 如何在WPS、Word里插入高亮代码块
  2. android 屏幕截图检测,Android 屏幕截图
  3. vue2.0 使用xlsx读取excel文件数据 操作流程 以及文件中特殊日期数据的处理
  4. 【源码】非常有用的Vml图像画板
  5. 专利撰写是什么工作_如何(以及为什么)撰写出色的用户故事
  6. Android多维商品属性SKU选择
  7. 抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现
  8. egg项目和DVA项目的目录结构比较
  9. 多益网络二笔两个编程题
  10. com.google.guava包里面的相关简单方法