CN104657208A - 一种增强型Linux选择器及其处理方法 - Google Patents
一种增强型Linux选择器及其处理方法 Download PDFInfo
- 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
Links
Abstract
本发明涉及一种增强型Linux选择器及其处理方法,设置有ESelect函数,在其中注册所关注的事件,以便在轮询过程发生事件时自动触发该事件的处理函数;并且,通过设置所述ESelect函数中的一个参数,使得轮询过程中无论是否有事件发生,定时器都不会被清零。本发明解决了传统Select函数对定时器支持不够的问题;本发明通过提高了选择器的定时功能,并能够通过标记定时器类型,选择开启或关闭该定时功能。
Description
技术领域
本发明涉及网络设备,特别涉及一种增强型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函数还包含最大监听描述符、读描述符集合,写描述符集合,错误描述符集合,以及定时器超时时间。
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)
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 |
-
2015
- 2015-03-18 CN CN201510118465.1A patent/CN104657208A/zh active Pending
Patent Citations (2)
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)
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 |