select函数使用方法
一、函数介绍
头文件:
#include <sys/select.h>函数原型:
int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);
参数介绍:
1.int nfds:待测试的描述符个数,它的值是待测试的最大描述符加1
2.fd_set *readfds:指向fd_set结构的指针,这个集合中包括文件描述符,我们是要监视这些文件描述符的读变化的,就是关注是否可以从这些文件中读取数据,如果这个集合中有一个文件可读,select就会返回一个大于0的值,表示有文件可读,如果没有可读的文件,则根据timeout参数再判断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的读变化。
3.fd_set *writefds:指向fd_set结构的指针,这个集合中包括文件描述符,我们是要监视这些文件描述符的写变化的,就是关注是否可以从这些文件中写入数据,如果这个集合中有一个文件可写入,select就会返回一个大于0的值,表示有文件有写入权限,如果没有可一写的文件,则根据timeout参数再判断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的读变化。
4.fd_set *exceptfds:这个参数用来检测文件有无异常情况发生
5.struct timeval *timeout:
这个地方根据填入的值不同,可以设置三种select的工作方式
方式一:此处填入NULL,使用阻塞的方式,一直到检测到文件描述符有变化才返回·。
方式二:若填入0秒0毫秒,就变成非阻塞函数,不管文件描述符是否有变化,都会立刻返回继续执行,文件无变化返回0,有变化返回一个正值。
方式三:timeout的值大于0,该值就是等待的超时时间,即select在timeout时间内阻塞,超时时间之内有事件到来就返回了,否则在超时后不管怎样一定返回,文件无变化返回0,有变化返回一个正值。
返回值:
负值:select错误;
正值:某些文件可读写或出错;
0:等待超时,没有可读写或错误的文件。
返回的错误码介绍:
EBADF 文件描述词为无效的或该文件已关闭EINTR 此调用被信号所中断EINVAL 参数n为负值。ENOMEM 核心内存不足
二、select用到的函数
FD_CLR(inr fd,fd_set* set);//用来清除描述词组set中相关fd的位FD_ISSET(int fd,fd_set *set);//用来测试描述词组set中相关fd的位是否为真FD_SET(int fd,fd_set*set);//用来设置描述词组set中相关fd的位FD_ZERO(fd_set *set);//用来清除描述词组set的全部位
三、用到的结构体(下面是man手册截取的时间结构体的介绍)
The timeoutThe time structures involved are defined in <sys/time.h> and look likestruct timeval {long tv_sec; /* seconds */long tv_usec; /* microseconds */};andstruct timespec {long tv_sec; /* seconds */long tv_nsec; /* nanoseconds */};
在设置超时时间时可以参考下面的方式初始化参数
struct timeval tv; //声明结构体
tv.tv_sec = 2;//秒
tv.tv_usec = 33;//毫秒
select(0, NULL, NULL, NULL, &tv);
//这样一个简单的定时就设置好了
tcp并发模型——select
select函数使用方法相关推荐
- select 函数使用方法
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如 connect.accept.recv或recvfrom这样的阻塞程序 ...
- jQuery选择文本事件函数– select()方法
jQuery select() method triggers when a text in the text field or text area is selected. This method ...
- 29.Linux网络编程熟练掌握 TCP 状态张换图熟练堂握端口复用的方法了解半关闭的概念和实现方式了解多路10 转接模型熟练掌握 select 函数的使用熟练使用 fdset 相关函数的使用能够编写
把昨天的 第二天的内容说一下,复习一下,第二天 讲的东西不算多,但是有两个作业题来写一写, 大致浏览一下,三次握手 四次挥手的过程,大家有没有画一下? 能画出来吗?同学们,大家注意 这个写代码的时候其 ...
- c语言select函数头文件,简述select函数的功能与调用方法
使用select 首先我们需要解答一些疑惑.为什么要使用select函数? 比如你有一个服务器程序,维护着N多个TCP连接,你如何去判断这些TCP连接上有数据传送过来了呢?最傻瓜的办法就是隔一定时间去 ...
- SQLserver 常用函数适用方法(转载)
SQL Server 常用函数使用方法(持续更新) 之前就想要把一些 SQL 的常用函数记录下来,不过一直没有实行...嘿嘿... 直到今天用到substring()这个函数,C# 里面这个方法起始值 ...
- socket通信时如何判断当前连接是否断开--select函数,心跳线程,QsocketNotifier监控socket...
client与server建立socket连接之后,如果突然关闭server,此时,如果不在客户端close(socket_fd),会有不好的影响: QsocketNotifier监控socket的槽 ...
- mysql 取出20条数据_“取出数据表中第10条到第20条记录”的sql语句+select top 使用方法...
1.首先.select top使用方法: select * from table -- 取全部数据.返回无序集合 select top n * from table -- 依据表内数据存储顺序取前n ...
- UNIX中的Select函数
表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unistd.h> 定义函数 int sel ...
- Linux网络编程 五种I/O 模式及select、epoll方法的理解
近期一次面试机会让我觉得有很多地方理解可能不到位,翻翻谷歌的资料加深对一些技术的理解 五种I/O 模式: [1] 阻塞 I/O (Linux下的I/O操作默认是阻塞I/O,即open和socket创建 ...
最新文章
- Android EditText 编辑框 获取焦点的方法
- MOS管体二极管的作用
- 在Win7 + VMware7下安装Xcode 4
- Java是如何实现Future模式的?万字详解!
- cmake 编译mysql_CentOS5.6下使用cmake编译MySQL5.5.13源码和安装
- 图解机房空调制冷系统
- Java黑皮书课后题第7章:*7.33(文化:中国生肖)使用一个字符串数组存储动物名称来简化程序清单3-9的程序
- 推荐几本书,这些书.Net程序员最好要看
- UI(1)---2018 UI 设计趋势
- JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询
- JZ The First Day 总结
- linux的基本命令快捷键,Linux常用命令快捷键有哪些?
- 快速理解MapReduce
- 如何设置和修改网页地址栏图标favicon.ico?
- 风力摆控制系统2015年全国大学生电子设计竞赛B题
- 手机自带html怎么卸载,手机自带软件怎么卸载
- 隔壁班的 女同学 觉得这本技术书还挺棒的
- JAVA衣依服装销售平台计算机毕业设计Mybatis+系统+数据库+调试部署
- xxljob从入门到精通-全网段最全解说
- kafka broker 进入 conflicted ephemeral node 死循环
热门文章
- Excel技巧 - 办公提效
- 批量修改txt内容的某个字符串-多快好省
- 下面最难防范的网络攻击是计算机病毒,求大神们帮帮忙,拜托了,在这先谢过了。...
- 【未完成】【甄选靶场】Vulnhub百个项目渗透——项目四十一:DEFCON Toronto-Galahad(图像深层分析,流量分析)
- 解决:idea运行scala程序,报错:Error:scalac: bad option: -make:transitive
- 群晖NAS存储空间损毁 硬盘损毁处理
- 华为HCIE这么多的认证方向,哪个方向最有价值,含金量最高?
- 立方体图片的在线绘制与制作
- memcpy的F libc : FORTIFY: memcpy: prevented异常分析处理
- 【前端html页面数据导出为pdf文件】