linux中有fd set函数吗,LINUX下FD_SET介绍

刚刚了解了linux下select系统调用,函数原型是

#include

#include

int

select(int maxfdpl, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);

如何给readset, writeset, exceptset这3个参数中的每一个参数指定一个或多个描述符是一个设计上的问题。select使用描述符集,通常是一个整数数组,其中每一个整数中的每一位对应一个描述符。举例来说,假设使用32位整数,那么该数组的第一个元素对应于描述符0-31,第二个元素对应于32-63,依此类推。隐藏在名为fd_set的数据类型和以下四个宏:

void FD_ZERO(fd_set *fdset);

void FD_SET(int fd, fd_set *fdset);

void FD_CLR(int fd, fd_set *fdset);

int FD_ISSET(int fd, fd_set *fdset);

宏FD_SET设置文件描述符集fdset中对应于文件描述符fd的位(设置为1),宏FD_CLR清除文件描述符集fdset中对应于文件描述符fd的位(设置为0),宏FD_ZERO清除文件描述符集fdset中的所有位(即把所有位都设置为0)。使用这3个宏在调用select前设置描述符屏蔽位。因为这3个描述符集参数是值-结果参数,在调用select后,结果指示哪些描述符已就绪。使用FD_ISSET来检测文件描述符集fdset中对应于文件描述符fd的位是否被设置。描述符集内任何与未就绪描述符对应的位返回时均清成0,为此,每次重新调用select函数时,必须再次把所有描述符集内所关心的位置1.

通常,操作系统通过宏FD_SETSIZE来声明在一个进程中select所能操作的文件描述符的最大数目。许多系统实现有类似下面的声明,取自4.4BSD的:

#ifndef FD_SETSIZE

#define FD_SETSIZE 256

#endif

不过,更新的源自BSD的内核和源自SVR4的内核把它放在头文件中。

在linux下头文件中,是这样描述的:

/* Maximum number of file descriptors in `fd_set`. */

#define FD_SETSIZE _FD_SETSIZE

_FD_SETSIZE定义在/usr/include/linux下的posix_types.h中:

/*

*This macro may hava been defined in . But we always use the one here.

*/

#undef _FD_SETSIZE

#define _FD_SETSIZE 1024

我们可以把FD_SETSIZE定义为某个更大的值以增加select所用描述符集的大小。不幸的是,这样做通常行不通。因为select是在内核中实现的,并把内核的FD_SETSIZE定义为上限使用。因此,增大FD_SETSIZE还要重新编译内核。值得注意的是,有些应用程序开始使用poll代替select,这样可以避开描述符有限问题。另为,select的典型实现在描述符数增大时可能存在扩展性问题。

有些厂家正在将select的实现修改为允许进程将FD_SETSIZE定义为比默认值更大的某个值,例如BSD/OS。然而,从程序的可移植性考虑,不建议这样使用。

.Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

Linux下tmpfs介绍及使用

tmpfs介绍 tmpfs是一种虚拟内存文件系统,而不是块设备.是基于内存的文件系统,创建时不需要使用mkfs等初始化它最大的特点就是它的存储空间在VM(virtual memory),VM是由lin ...

06 Linux下Shell介绍

一.概述 每个人在成功登陆Linux后,系统会出现不同的提示符号,例如$,~,#等,然后你就可以开始输入需要的命令.若命令正确,系统就会依据命令的要求来执行,直到注销系统为止,在登陆到注销期间,输入的 ...

转://Linux下tmpfs介绍及使用

tmpfs介绍 tmpfs是一种虚拟内存文件系统,而不是块设备.是基于内存的文件系统,创建时不需要使用mkfs等初始化它最大的特点就是它的存储空间在VM(virtual memory),VM是由lin ...

linux下定时器介绍1

POSIX Timer 间隔定时器 setitimer 有一些重要的缺点,POSIX Timer 对 setitimer 进行了增强,克服了 setitimer 的诸多问题: 首先,一个进程同一时刻只 ...

linux下定时器介绍2--timer_create等函数集的使用示例

程序1:采用新线程派驻的通知方式 程序2:通知方式为信号的处理方式 #include #include #include

Linux下iptables介绍

ptables简介 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表. filter负责过滤数据包,包括的规则链有,input,outp ...

LINUX下多路径的介绍和安装配置(测试未写完)

一.什么是多路径 普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系.而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存储通过了光纤交换机或者多块网卡及IP来 ...

Linux下multipath多路径配置

一.什么是多路径 普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系.而到了有光纤组成的SAN环境,或者由iSCSI组成的IPSAN环境,由于主机和存 储通过了光纤交换机或者多块网卡及IP ...

随机推荐

在C#代码中应用Log4Net系列教程(附源代码)

Log4Net应该可以说是DotNet中最流行的开源日志组件了.以前需要苦逼写的日志类,在Log4Net中简单地配置一下就搞定了.没用过Log4Net,真心不知道原来日志组件也可以做得这么灵活,当然这 ...

Best way to add Gradle support to IntelliJ Project

1, Touch build.gradle in root project folder, and use plugins: apply plugin: 'idea' apply plugin: 'j ...

【MongoDB】C#中的Mongo数据类型转换

用过Mongo的人都知道,Mongo使用的是Bson类型,有string,int,date,bool等数据类型,具体就不详述了. 在使用Mongo 的C#官方驱动时会碰到一个问题,如何将Bson中的数 ...

CSS第四天总结 更多的属性 圆角 边框图片 段落属性 颜色渐变 盒子阴影

圆角边框: border-radius    一个值时表示四个角用的圆半径,4个值时分别是左上角.右上角.左下角.右下角,单位可以是px和百分比,百分比是半径相对于边框长度的比例 在CSS3中我们终于 ...

OC语言-07-OC语言-Foundation框架

结构体 NSRange/CGRange 用来表示一个元素在另一个元素中的范围,NSRange等价于CGRange 包含两个属性: NSUInteger location:表示一个元素在另一个元素中的位 ...

CentOS6.5下netcat工具安装教程

1.下载下载地址:http://sourceforge.net/projects/netcat/files/netcat/0.7.1/下载的是netcat-0.7.1.tar.gz版本 2.拷贝用U盘 ...

Python内置函数(17)——chr

英文文档: chr(i) Return the string representing a character whose Unicode code point is the integer i. F ...

2018-2019-1 20189201 《LInux内核原理与分析》补漏_1125写

我的愿望是 好好学习Linux 一.题目与解释 1 test.txt 中的内容是: No Name Mark Percent 01 tom 69 91 02 jack 71 87 03 alex 68 ...

Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十六):容器部署项目

容器部署项目 这一章我们引入docker,采用docker容器的方式部署我们的项目. 首先需要有一个linux环境,并且安装 java 和 maven 以及 docker 环境,这个教程多如牛毛,不再 ...

Hadoop技术内幕1——源代码环境准备

Hadoop核心 1.HDFS:高容错性.高伸缩性……,允许用户将Hadoop部署在廉价的硬件上,构建分布式系统 2.MapReduce:分布式计算框架,允许用户在不了解分布式系统底层细节的情况下,开 ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vba 指定列后插入列_在不同的列左侧插入指定数量的空白列

任务: 在不同的列左侧插入指定数量的空白列(本例是要求在每列左侧插入第2行数字对应的空白列) 插入空白列前 插入空白列后 vba代码如下: Sub 在不同的列左侧插入指定数量的空白列() Dim m, n, i As Integer For n 5 To 1 Step -1 Sheets("Sheet1").C…

怎么监听linux防火墙,linux怎么查看防火墙是否开启并清除防火墙规则?

iptables是linux下的防火墙组件服务,相对于windows防火墙而言拥有更加强大的功能,下面我们就来看看linux系统中关于iptables的一般常见操作,判断linux系统是否启用了iptables服务,并清除防火墙规则的教程。一、检查iptables是否安…

手册如何看运放的db_如何处理金属离子与配体之间的配位键?

更多资讯,请访问www.yinfotek.com 或关注微信公众号“殷赋科技”。殷赋学术交流2群已建立,需求加群的朋友,请在公众号输入“加群”,验证后即入群。1A:请教大家一个问题:在做对接模拟的过程中蛋白活性中心存在重要金属离…

修改PHP上传文件的大小限制

Warning: POST Content-Length of 35052172 bytes exceeds the limit of 8388608 bytes in Unknown on line 0 该条警告是PHP.ini中的配置有关。 上述错误信息的大致意思是,我们使用POST请求提交的数据大小超过了服务器的最大限制数 出现上述错误的原因是&#xff0…

linux如何得到本机地址,Linux下如何得到本机所有IP地址及MAC地址

已知:gethost and gethostbyname,测试只能得到一个IP地址。---------------------------------------------------------------原文:http://www.chinaunix.net/jh/23/161236.html---------------------------------------------------------------整理后…

secure连不上远程地址_[笔记]Mariadb安装并配置远程访问

引言熟悉的小伙伴都知道我自用有一台NAS,并为此折腾了不少内容:西蒙宫:折腾,用J3455搭建家庭nas西蒙宫:让家庭NAS走向世界,兼谈Zerotier西蒙宫:折腾——组装NAS编译安装ffmpeg在NAS上部署了Next…

从Wireshark看TCP连接的建立与关闭

TCP是一种面向连接、可靠的协议。TCP连接的建立与断开,都是需要经过通信双方的协商。用一句话概括就是:三次握手say hello(建立连接);四次握手say goodbye(断开连接)。要了解TCP连接的建立与断开…

linux管道通信机制有哪两种,linux的管道通信机制

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情什么是弹性…

python批量ping脚本_Python多线程批量Ping主机IP的脚本

Python 编写多线程 Ping 主机IP的脚本1. 先编写一个 Ping 主机IP的脚本ping_ip.pyimport subprocessimport time# 记录开始执行的时间start_time time.time()# 定义用来 ping 的254 个 ipip_list [10.3.1.str(i) for i in range(1,255)]for ip in ip_list:res subprocess.ca…

用Visual C#来清空回收站(2)

四.程序的源代码(recycled.cs)、编译方法及运行后的界面:  (1).程序的源代码:recycled.cs: using System.IO ; using System.Windows.Forms ; //导入程序中用到的名称空间 class Recycle { pu…

Linux6.8 ssh开启,CentOS 6.8升级 ssh到最新版SSH-8.2p1

查看当前版本ssh -VOpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013有漏洞需要升级编译所需工具包yum install gcc pam-devel zlib-devel安装telnet服务 //防止远程ssh升级失败yum -y install telnet-server* telnetvim /etc/xinetd.d/telnet将disable字段的yes改为no以启用te…

jq苹果手机全屏下点击无效果_苹果系统自带外挂?无需越狱也可录制动作脚本...

网络游戏开始流行起来之后,随之而来的是外挂的兴起,各式各样的外挂中有两种最为致命:物理外挂和系统自带外挂。随着国内电竞行业和电竞直播的兴起,“物理外挂”出现在我们周围的频率也越来越高,比如扩大视角的显示器、…

利用cors,实现js跨域访问Tomcat下资源

第一步:页面js代码: function createCORSRequest(method, url){var xhr new XMLHttpRequest();if ("withCredentials" in xhr){xhr.open(method, url, true);} else if (typeof XDomainRequest ! "undefined"){xhr new XDomainReq…

c语言不同类型变量用什么表示什么作用,C语言数据类型及变量整理

数据类型获取int的字节数大小方法printf("int bytes:%d",sizeof(int));列表整理Int 与 long int的区别早期的C平台是16位int系统,int用二字节表示,范围是-32768~32767;long是long int的简写,用4字节表示,范围…

python求第n个质数_找到第n个质数:麻木

我试图用埃拉霍斯特内斯的筛子找到第n个质数。是的,我看到了类似的帖子,但是我对这段代码有一个问题。一旦找到第n个素数,我就停止算法。我写的是:def nth_prime(n):limit 10**2pn 1 #keeps track of how many prime numbers we…

python中浮点数能用乘法吗_简单讲解Python中的数字类型及基本的数学计算

Python有四种类型的数字:1.整型 a = 2 print a 2.长整型 b = 123456789 print b 3.浮点数 c = 3.2E2 print c 4.复数 复数为实数的推广,它使任一多项式都有根。复数当中有个“虚数单位”j,它是-1的一个平方根。任一复数都可表达为x+yj,其中x及y皆为实数,分别称为复数之“实…

c语言设计通讯录管理程序,C语言程序的设计学生通讯录管理系统方案.docx

include ustdio.hH include "stdlib.h” include "string.h" include "conio.h” include Mstdlib.hu ^define null 0 struct record{char namc[20];char phone[20J;char adress[40J;char postcodeflO];char c_mail[30];}sludcnt[500];struct LinkList{str…

*在通配符及正则表达式中的差别

*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的。比如通配符可以用*来匹配任意字符,而正则表达式不行,他只匹配任…

python主成分分析实验报告_python进行主成分分析

数据:序号x1x2x3x414025202101.553031203135042504.518051203.59506101.512507401194082704136092803.51160101703960111803.514401213023050132201.51720141601.53560152202.514301614022020172202141018401100192011260201202200数据标准化:x1x2x3x40-…

c语言可以编制出功能复杂的程序,2018级《C语言程序设计》复习题及答案(5页)-原创力文档...

2014 C2014 C级《 语言程序设计》复习题及答案级《 语言程序设计》复习题及答案一、单项选择题一、单项选择题1 C (B )1、以下不是 C 语言的特点的是 (B )、以下不是 语言的特点的是A CA C、 语言简洁、紧凑、 语言简洁、紧凑BB、 能够编制出功能复杂的程序、 能够编制出功能复…