select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型: 所在的头文件为:#include <sys/time.h> 和#include <unistd.h> 先对函数中的参数做一个简单的介绍。参数maxfd是需要监视的最大的文件描述符值+1;rdset,wrset,exset分别对应于需要检测的可读文件描述符的集合,可写文件描述符的集 合及异常文件描述符的集合。struct timeval结构用于描述一段时间长度,如果在这个时间内,需要监视的描述符没有事件发生则函数返回,返回值为0。 对于fd_set类型通过下面四个宏来操作: 过去。。。。。。好长一大段哦,为了保证大家的注意力,我决定将这一大段长长的对过去情况的介绍去掉,直接寻找正题,保持目标的关注度啊。现在,UNIX系统通常会在头文件<sys/select.h>中定义常量FD_SETSIZE,它是数据类型fd_set的描述字数量,其值通常是1024,这样就能表示<1024的fd。 好了在研究了一番关于fd_set的信息之后,再回到对select函数的理解上来吧。 功能:测试指定的fd可读?可写?有异常条件待处理? 对于select函数的功能简单的说就是对文件fd做一个测试。测试结果有三种可能: 返回值:返回对应位仍然为1的fd的总数。注意啦:只有那些可读,可写以及有异常条件待处理的fd位仍然为1。否则为0哦。举个例子,比如recv(), 在没有数据到来调用它的时候,你的线程将被阻塞,如果数据一直不来,你的线程就要阻塞很久.这样显然不好。所以采用select来查看套节字是否可读(也就是是否有数据读了) 。 理解select模型的关键在于理解fd_set,为说明方便,取fd_set长度为1字节,fd_set中的每一bit可以对应一个文件描述符fd。则1字节长的fd_set最大可以对应8个fd。 (3)若再加入fd=2,fd=1,则set变为0001,0011 基于上面的讨论,可以轻松得出select模型的特点: (2)可以有效突破select可监控的文件描述符上限。 使用select函数的过程一般是: 以下是一个测试单个文件描述字可读性的例子: |
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET相关推荐
- linux 查看socket fd,linux socket中select()函数以及FD_ZERO FD_SET FD_CLR FD_ISSET
linux socket非阻塞编程时常见到如下的code: socket s; ..... fd_set set; ..... struct timeval tv; while(1) { FD ...
- select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型, 原型: int select(int maxfd,fd_set *rds ...
- Linux select函数的使用
文章目录 一.select函数 1.fd_set结构体 FD_ZERO FD_SET FD_CLR FD_ISSET 2.timeval 结构体 3.返回值 二.文件描述符就绪条件 三.使用 一.se ...
- C select 函数
原文出自:http://blog.ednchina.com/thinkker/151596/message.aspx select函数: 系统提供select函数来实现多路复用 ...
- select函数及fd_set介绍
1. select函数 1. 用途 在编程的过程中,经常会遇到许多阻塞的函数,好像read和网络编程时使用的recv, recvfrom函数都是阻塞的函数,当函数不能成功执行的时候,程序就会一直阻塞在 ...
- select()函数返回值及select与socket阻塞的关系及select函数的意义
1.select()函数返回值 select的返回值与recv函数的返回值十分类似,都分>0,=0,<0三种情况. >0:有事件发生, FD_ISSET(socket, &f ...
- UNIX中的Select函数
表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unistd.h> 定义函数 int sel ...
- linux中select()函数分析
http://blog.csdn.net/zi_jin/article/details/4214359 =================================== Select在Socke ...
- form select multiple 某个字段是数组_你知道什么是Select函数吗?
Select函数:允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它. select man手册 举个栗子,我们可以调用Select,告诉内核仅仅在 ...
最新文章
- mysql 内连接查询慢_MySQL慢查询有2个内连接
- Linux之内存描述符mm_struct
- VMware VCP
- 微软IE 9 Beta全程体验图集
- 数据结构——图-迪杰斯特拉算法
- linux bind日志级别,BIND日志相关(一)
- np读取csv文件_被 Pandas read_csv 坑了
- js组装知识(待续……)
- 点击劫持:X-Frame-Options未配置
- oracle坏块修复
- 将图片转换为base64_图片与base64相互转换
- Spring Cloud Alibaba系列教程-03-搭建生产可用的Nacos集群
- Extended VINS-Mono: 大规模户外环境进行绝对和相对车辆定位的系统性方法(IROS2021)...
- 蓝桥杯算法提高 盾神与条状项链
- 类和对象5:绑定和静态、类、抽象方法
- c语言中-next是什么意思,Java中关于nextInt()、next()和nextLine()的理解
- 罗赛塔石碑Rosetta Stone安装教程
- IP广播无法登陆服务器系统,数字IP广播系统操作指南
- Thread.setDaemon设置说明
- 【实用工具指南 一】OCR图片识别自动翻译原文替换
热门文章
- vmware workstation17环境安装centos7
- 开启市场新格局 且看新华三计算与存储新品发布会
- 利用FormData对象实现AJAX文件上传功能及后端实现
- 原生JS数组去重的几种方法
- 《容器技术系列》一1.4 Docker运行案例分析
- hibernate实现多变联合查询
- (翻译)31天Windows Phone学习-1-项目模板
- 2018-2019-1 《信息安全系统设计基础》教学进程
- Spring + Dubbo + zookeeper (linux) 框架搭建
- 网络爬虫--1.通用爬虫和聚焦爬虫