CN104657208A - 一种增强型Linux选择器及其处理方法 - Google Patents

一种增强型Linux选择器及其处理方法 Download PDF

Info

Publication number
CN104657208A
CN104657208A CN201510118465.1A CN201510118465A CN104657208A CN 104657208 A CN104657208 A CN 104657208A CN 201510118465 A CN201510118465 A CN 201510118465A CN 104657208 A CN104657208 A CN 104657208A
Authority
CN
China
Prior art keywords
timer
event
function
selector switch
enhancement mode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201510118465.1A
Other languages
English (en)
Inventor
张伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Feixun Data Communication Technology Co Ltd
Original Assignee
Shanghai Feixun Data Communication Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Feixun Data Communication Technology Co Ltd filed Critical Shanghai Feixun Data Communication Technology Co Ltd
Priority to CN201510118465.1A priority Critical patent/CN104657208A/zh
Publication of CN104657208A publication Critical patent/CN104657208A/zh
Pending legal-status Critical Current

Links

Abstract

本发明涉及一种增强型Linux选择器及其处理方法,设置有ESelect函数,在其中注册所关注的事件,以便在轮询过程发生事件时自动触发该事件的处理函数;并且,通过设置所述ESelect函数中的一个参数,使得轮询过程中无论是否有事件发生,定时器都不会被清零。本发明解决了传统Select函数对定时器支持不够的问题;本发明通过提高了选择器的定时功能,并能够通过标记定时器类型,选择开启或关闭该定时功能。

Description

一种增强型Linux选择器及其处理方法
技术领域
本发明涉及网络设备,特别涉及一种增强型Linux选择器及其处理方法。
背景技术
Linux程序中处理事件的方式主要有两种,即轮询和触发,采用轮询方式的话需要程序不停运转,会产生很多的空操作;而采用触发方式的话,程序只要将所关注的事件注册到Select函数(选择函数)中,当事件发生时,会自动触发该事件的处理函数。当没有事件发生时,进程会进入到休眠模式,这样极大地节约了CPU的资源,对于嵌入式设备而言,这样还可以节约电量。因此,Linux中Select函数是一个应用非常广泛的函数。
Linux中的Select函数属于系统调用函数,具体实现是在驱动程序中,其基本运行流程图如图1所示:
A1.    初始化FD_SET,这是一个socket套接字集合,在这一步将所有要关注的套接字都加入到FD_SET中;
A2.    初始化定时器;
A3.    Select函数轮询所有的FD_SET和定时器;
A4.    若有FD事件发生,即有套接字有数据,则处理FD事件,然后将定时器清零;
A5.  若有定时器超时,则处理定时器事件。
所述Select函数的原型是:int select (int maxfdp, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout)。其中,maxfdp是最大监听描述符,readfds是读描述符集合,writefds是写描述符集合,errorfds是错误描述符集合,timeout是定时器超时时间。
Select函数中的定时器,如果没有任何事件发生,到达timeout设定的超时时间后,将触发Select函数返回;如果有事件发生,则定时器会被清零。也就是说,这里的定时器只能记录读写事件的超时,而不能用于普通的定时功能。然而,这种在处理事件时将定时器清零的机制,在某些场合下是有用的,但是在很多场合又会带来很多麻烦。
发明内容
本发明的目的在于提供一种增强型Linux选择器及其处理方法,完善Linux中Select函数对定时器的支持,增强了定时功能。
为了达到上述目的,本发明的一个技术方案是提供一种增强型Linux选择器的处理方法,其中包含以下过程:
初始化套接字集合,将所有要关注的套接字加入到套接字集合中;
初始化定时器,并初始化定时器类型标记为第一数值,表示定时器为不可清除的定时器;
轮询所有的套接字集合和定时器;
当有事件发生而使被关注的套接字有数据时,处理事件,并且不将定时器超时时间清零。
优选地,若初始化定时器类型标记为第二数值的,表示定时器为可清除的定时器,则当有事件发生并处理该事件之后,将定时器超时时间清零。
优选地,当有事件发生并处理该事件之后,通过判断定时器类型标记为第二数值或第一数值,来确定定时器是否为可清除的定时器,进而确定是否执行将定时器超时时间清零的操作。
优选地,轮询所有的套接字集合和定时器时,若没有事件发生而有定时器超时的,则处理定时器事件。
本发明的另一个技术方案是提供一种增强型Linux选择器,其中设置有ESelect函数,在其中注册所关注的事件,以便在轮询过程发生事件时自动触发该事件的处理函数;并且,所述ESelect函数中的一个参数,对应于轮询过程中无论是否有事件发生定时器都不会被清零的操作。
优选地,所述ESelect函数设定有定时器类型标记;该定时器类型标记的第一数值,对应于事件处理时不执行定时器清零的操作;该定时器类型标记的第二数值,对应于事件处理时执行定时器清零的操作。
优选地,所述ESelect函数还包含最大监听描述符、读描述符集合,写描述符集合,错误描述符集合,以及定时器超时时间。
本发明提供一种增强型Linux选择器及其处理方法,解决了传统Select函数对定时器支持不够好的问题;本发明通过增加ESelect函数,提高了选择器的定时功能;通过标记定时器类型,可以选择开启或关闭该定时功能。
附图说明
图1是传统Linux下Select函数的处理流程图;
图2是本发明中改进后的ESelect函数的处理流程图。
具体实施方式
本发明所述增强型Linux选择器,对传统的Select函数进行一次封装,记为ESelect函数,其原型为:int eselect (int maxfdp, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout, int timeoutFlag)。
其中,timeoutFlag用于标记定时器的类型,如果timeoutFlag=0,则表示兼容传统的Select函数,其行为等价于传统的Select函数。如果timeoutFlag=1,则表示该定时器为不可被清除的定时器,不管有没有读写事件发生,该定时器都不会被清零。
其他参数含义与传统Select函数中的一致,即,maxfdp是最大监听描述符,readfds是读描述符集合,writefds是写描述符集合,errorfds是错误描述符集合,timeout是定时器超时时间。
本发明所述ESelect函数的处理流程图,如图2所示:
B1.    初始化socket套接字集合FD_SET,将所有要关注的套接字都加入到FD_SET中;
B2.    初始化定时器;
B3.    初始化定时器类型标记timeoutFlag;
B4.    轮询所有的FD_SET和定时器,根据结果执行B5或B9;
B5.  若有FD事件发生,即,被关注的套接字有数据,则处理FD事件;
B6.  判断定时器类型标记timeoutFlag,根据结果执行B7或B8;
B7.  如果定时器类型标记timeoutFlag为True(真),表示timeoutFlag=0,则按照传统Select函数方式将定时器清零,即,将定时器超时时间timeout清零;
B8.  如果定时器类型标记timeoutFlag为False(假),表示timeoutFlag=1,为不可被清除的定时器,则定时器超时时间timeout不清零;
B9.  在B4时如果有定时器超时,则处理定时器事件;
B10.  经B7、B8或B9完成一次事件处理后,触发返回B4进行下一次轮询。
综上所述,本发明提供一种增强型Linux选择器及其处理方法,通过增加ESelect函数,提高了选择器的定时功能;通过标记定时器类型,可以选择开启或关闭该定时功能。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。

Claims (7)

1.一种增强型Linux选择器的处理方法,其特征在于,包含以下过程:
初始化套接字集合,将所有要关注的套接字加入到套接字集合中;
初始化定时器,并初始化定时器类型标记为第一数值,表示定时器为不可清除的定时器;
轮询所有的套接字集合和定时器;
当有事件发生而使被关注的套接字有数据时,处理事件,并且不将定时器超时时间清零。
2.如权利要求1所述增强型Linux选择器的处理方法,其特征在于,
若初始化定时器类型标记为第二数值的,表示定时器为可清除的定时器,则当有事件发生并处理该事件之后,将定时器超时时间清零。
3.如权利要求2所述增强型Linux选择器的处理方法,其特征在于,
当有事件发生并处理该事件之后,通过判断定时器类型标记为第二数值或第一数值,来确定定时器是否为可清除的定时器,进而确定是否执行将定时器超时时间清零的操作。
4.如权利要求1所述增强型Linux选择器的处理方法,其特征在于,
轮询所有的套接字集合和定时器时,若没有事件发生而有定时器超时的,则处理定时器事件。
5.一种增强型Linux选择器,其特征在于,
设置有ESelect函数,在其中注册所关注的事件,以便在轮询过程发生事件时自动触发该事件的处理函数;
并且,所述ESelect函数中的一个参数,对应于轮询过程中无论是否有事件发生定时器都不会被清零的操作。
6.如权利要求5所述的增强型Linux选择器,其特征在于,
所述ESelect函数设定有定时器类型标记;
该定时器类型标记的第一数值,对应于事件处理时不执行定时器清零的操作;
该定时器类型标记的第二数值,对应于事件处理时执行定时器清零的操作。
7.如权利要求6所述的增强型Linux选择器,其特征在于,
所述ESelect函数还包含最大监听描述符、读描述符集合,写描述符集合,错误描述符集合,以及定时器超时时间。
CN201510118465.1A 2015-03-18 2015-03-18 一种增强型Linux选择器及其处理方法 Pending CN104657208A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510118465.1A CN104657208A (zh) 2015-03-18 2015-03-18 一种增强型Linux选择器及其处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510118465.1A CN104657208A (zh) 2015-03-18 2015-03-18 一种增强型Linux选择器及其处理方法

Publications (1)

Publication Number Publication Date
CN104657208A true CN104657208A (zh) 2015-05-27

Family

ID=53248382

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510118465.1A Pending CN104657208A (zh) 2015-03-18 2015-03-18 一种增强型Linux选择器及其处理方法

Country Status (1)

Country Link
CN (1) CN104657208A (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102821119A (zh) * 2011-06-10 2012-12-12 北大方正集团有限公司 一种客户端、上传文件的方法、系统和设备
US20120320908A1 (en) * 2006-03-02 2012-12-20 Andrew Silver System and method for enabling dtmf detection in a voip network

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120320908A1 (en) * 2006-03-02 2012-12-20 Andrew Silver System and method for enabling dtmf detection in a voip network
CN102821119A (zh) * 2011-06-10 2012-12-12 北大方正集团有限公司 一种客户端、上传文件的方法、系统和设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
杨艳 等: "《从零开启大学生电子设计之路——基于MSP430 LaunchPad口袋实验平台》", 31 August 2014, 北京航空航天大学出版社 *
王雷: "《TCP/IP网络编程技术基础》", 31 March 2012, 清华大学出版社/北京交通大学出版社 *

Similar Documents

Publication Publication Date Title
CN107819611B (zh) 基于iec61850多服务端仿真的客户端测试方法
CN103218275B (zh) 数据错误修复方法、装置和设备
CN104503863A (zh) 用于虚拟容器系统容灾的内核态与用户态数据交换方法
CN103491134A (zh) 一种监控容器的方法、装置与代理服务系统
CN105022694A (zh) 用于移动终端测试的测试用例生成方法及系统
CN106155826B (zh) 用于在总线结构中检测及处理错误的方法和系统
CN103607421A (zh) 一种数据交互的方法及智能终端
CN111124818B (zh) 一种扩展器Expander的监控方法、装置及设备
CN104657208A (zh) 一种增强型Linux选择器及其处理方法
CN114564334B (zh) 一种mrpc数据处理方法、系统及相关组件
CN104184762A (zh) 一种服务器故障信息反馈方法和系统
CN108306865B (zh) 基于Netty框架的modbus粘包处理方法、装置
CN112580016B (zh) 一种工控防火墙的登录权限配置方法及装置
CN102789400B (zh) 一种中断不响应的检测方法及系统
CN104615271A (zh) 一种kvm的处理方法及一种kvm的处理装置
CN102622322B (zh) 一种利用黑匣子获取崩溃信息的方法、黑匣子及服务器
CN102752365A (zh) 信息处理的方法与装置
US20110270970A1 (en) Network device testing system and method
CN105653477A (zh) 一种基于双口ram的fpga内部硬核与软核通信的方法
CN105208192A (zh) 一种终端控制存储卡状态的方法及装置
CN111240956A (zh) 内存泄漏监测方法、装置、电子设备及计算机存储介质
TWI791316B (zh) 實現程式間通訊的方法及系統
CN103927153A (zh) 一种系统配置的方法、设备及系统
CN104636175A (zh) 一种嵌入式实时系统arm平台网络化方法
CN112463445B (zh) 一种链路恢复方法、装置、设备及计算机可读存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20150527

WD01 Invention patent application deemed withdrawn after publication