本发明涉及计算机技术领域,特别是涉及一种网口状态信息的获取方法及装置。
背景技术:
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分,该操作系统具有良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。
VxWorks操作系统下的网口信息保存在网络协议栈里面,网络协议栈代码是非常复杂的。因此,VxWorks操作系统下网口的收发报文数量获取困难,其网口收发统计信息隐藏在系统很深的地方。目前,VxWorks操作系统下的网口监控方法就是研究协议栈代码,对每个VxWorks操作系统版本进行适配,找到协议栈里面存放流量统计、link状态的数据结构,并保存下来。
由于需要研究网络协议栈代码,其中包括了很多协议栈的结构体、函数声明等,代码会非常复杂、难以理解,如果对协议栈代码理解不充分还容易出错;另外,VxWorks操作系统下的网口协议栈代码经历过多次大的改动,因此在某一个VxWorks操作系统版本下的代码并不能应用到其他版本,可移植性差。
由此可见,在VxWorks操作系统下如何实现获取网口状态信息的通用性是本领域技术人员亟待解决的问题。
技术实现要素:
本发明的目的是提供一种网口状态信息的获取方法及装置,用于在
VxWorks操作系统下实现获取网口状态信息的通用性。
为解决上述技术问题,本发明提供一种网口状态信息的获取方法,包括:
在VxWorks操作系统中申请一块空闲的内存块,并通过memDevCreate方法把申请的所述内存转换成伪内存设备;
利用IO接口打开所述伪内存设备以得到文件句柄,并通过任务重定向的方式把标准输出定向至所述文件句柄;
调用ifconfig函数以将ifconfig函数的输出写入至所述伪内存设备;
在所述伪内存设备中查找所需的网口状态信息。
优选地,还包括:恢复任务重定向以将打印输出从所述伪内存设备定向回到所述标准输出。
优选地,具体通过strstr函数查找所需的网口状态信息。
优选地,所述网口状态信息具体包括网口的收发报文统计信息和link状态信息。
优选地,所述内存块的存储空间为500字节。
为解决上述技术问题,本发明提供一种网口状态信息的获取装置,包括:
转换单元,用于在VxWorks操作系统中申请一块空闲的内存块,并通过memDevCreate方法把申请的所述内存转换成伪内存设备;
任务重定向单元,用于利用IO接口打开所述伪内存设备以得到文件句柄,并通过任务重定向的方式把标准输出定向至所述文件句柄;
写入单元,用于调用ifconfig函数以将ifconfig函数的输出写入至所述伪内存设备;
查找单元,用于在所述伪内存设备中查找所需的网口状态信息。
优选地,所述任务重定向单元,还用于恢复任务重定向以将打印输出从所述伪内存设备定向回到所述标准输出。
优选地,所述查找单元具体通过strstr函数查找所需的网口状态信息。
优选地,所述网口状态信息具体包括网口的收发报文统计信息和link状态信息。
优选地,所述内存块的存储空间为500字节。
本发明所提供的网口状态信息的获取方法及装置,该方法包括在VxWorks操作系统中申请一块空闲的内存块,并通过memDevCreate方法把申请的所述内存转换成伪内存设备;利用IO接口打开所述伪内存设备以得到文件句柄,并通过任务重定向的方式把标准输出定向至所述文件句柄;调用ifconfig函数以将ifconfig函数的输出写入至所述伪内存设备;在所述伪内存设备中查找所需的网口状态信息。由此可见,本方法通过伪内存设备和任务重定向方式获取ifconfig的输出结果,不需要分析协议栈代码,简单易行;另外,所用到的函数都是VxWorks操作系统通用接口函数,可移植性好,可应用在所有VxWorks操作系统的版本上。
附图说明
为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种网口状态信息的获取方法的流程图;
图2为本发明实施例提供的另一种网口状态信息的获取方法的流程图;
图3为本发明实施例提供的一种网口状态信息的获取装置的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。
本发明的核心是提供一种网口状态信息的获取方法及装置,用于在VxWorks操作系统下实现获取网口状态信息的通用性。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。
图1为本发明实施例提供的一种网口状态信息的获取方法的流程图。如图1所示,包括:
S10:在VxWorks操作系统中申请一块空闲的内存块,并通过memDevCreate方法把申请的内存转换成伪内存设备。
可以理解的是,本步骤中内存块必须是空闲的,即没有存储其它数据的内存块,以防止与后续存入的网口状态信息发生混乱。在具体实施中,申请的内存块是直接操作的,不能使用文件系统IO接口,本步骤中是通过memDevCreate方法将内存块转换为一个内存设备,从而可以使用文件系统的IO接口,例如open、read等函数进行读写操作。经过转换后的伪内存设备就像文件一样可以打开。
S11:利用IO接口打开伪内存设备以得到文件句柄,并通过任务重定向的方式把标准输出定向至文件句柄。
由于转换后的伪内存设备就像文件一样可以打开,因此,通过IO接口打开之后就得到了对应的文件句柄。本步骤中,通过任务重定向的方式将标准输出定向到文件句柄。
重定向是指把命令或者可执行程序的标准输出或标准错误输出重新定向到指定文件中。这样,命令或程序的输出就不显示在串口(VxWorks操作系统下是打印到串口)上,而是写入到指定文件中,即伪内存设备对应的文件句柄中。
任务重定向是指只重定向该任务,即该任务的输出不打印到串口,而是写到指定的文件,这里是指写到伪内存设备对应的文件句柄中。
S12:调用ifconfig函数以将ifconfig函数的输出写入至伪内存设备。
由于使用了任务重定向的方式,因此其他任务的输出还是会打印到串口,即不影响其他任务,也就是说其他任务的输出不会写到伪内存设备,不会往伪内存设备写入其他内容,伪内存设备内只会有ifocnfig命令的输出。
比如,在VxWorks操作系统下输入ifconfig命令,那么在ifconfig就会输出一堆字符串在串口上,重定向后串口看不到输出,因为输出会写到指定的文件里面,打开文件就可以看到ifconfig命令的输出,在本实施例就是打开伪内存设备就可以看到ifconfig命令的输出。
S13:在伪内存设备中查找所需的网口状态信息。
由于ifconfig函数对应的输出就是网口状态信息,因此伪内存设备中就存储了全部的网口状态信息。用户可以根据实际需求,查找所需要的网口状态信息,例如,具体通过strstr函数查找所需的网口状态信息。
作为优选地实施方式,网口状态信息具体包括网口的收发报文统计信息和link状态信息。
可以理解的是,网口状态信息除了上述列举的两种以外还可以包含其它的信息,这里只是一种具体的应用场景。
作为优选地实施方式,内存块的存储空间为500字节。
在具体实施中,内存块的存储空间需要根据网口的数量确定,即网口的数量越多,则包含的网口状态信息就会越多,则需要的存储空间就会越大。通常情况下,如果网口为1个或2个,则内存块的存储空间有500字节就可以满足要求。
本实施例提供的网口状态信息的获取方法,包括在VxWorks操作系统中申请一块空闲的内存块,并通过memDevCreate方法把申请的所述内存转换成伪内存设备;利用IO接口打开所述伪内存设备以得到文件句柄,并通过任务重定向的方式把标准输出定向至所述文件句柄;调用ifconfig函数以将ifconfig函数的输出写入至所述伪内存设备;在所述伪内存设备中查找所需的网口状态信息。由此可见,本方法通过伪内存设备和任务重定向方式获取ifconfig的输出结果,不需要分析协议栈代码,简单易行;另外,所用到的函数都是VxWorks操作系统通用接口函数,可移植性好,可应用在所有VxWorks操作系统的版本上。
图2为本发明实施例提供的另一种网口状态信息的获取方法的流程图。如图2所示,作为优选地实施方式,还包括:
S20:恢复任务重定向以将打印输出从伪内存设备定向回到标准输出。
为了不影响其它任务的进行,本实施例中,在查找到所需的网口状态信息之后,恢复任务重定向使得后续的打印输出从伪内存设备定向回到标准输出,即命令或执行程序显示在串口,而不输出到伪内存设备。
图3为本发明实施例提供的一种网口状态信息的获取装置的结构图。如图3所示,包括:
转换单元10,用于在VxWorks操作系统中申请一块空闲的内存块,并通过memDevCreate方法把申请的内存转换成伪内存设备。
可以理解的是,内存块必须是空闲的,即没有存储其它数据的内存块,以防止与后续存入的网口状态信息发生混乱。在具体实施中,申请的内存块是直接操作的,不能使用文件系统IO接口,转换单元10是通过memDevCreate方法将内存块转换为一个内存设备,从而可以使用文件系统的IO接口,例如open、read等函数进行读写操作。经过转换后的伪内存设备就像文件一样可以打开。
任务重定向单元11,用于利用IO接口打开伪内存设备以得到文件句柄,并通过任务重定向的方式把标准输出定向至文件句柄。
由于转换后的伪内存设备就像文件一样可以打开,因此,通过IO接口打开之后就得到了对应的文件句柄。本步骤中,通过任务重定向的方式将标准输出定向到文件句柄。
重定向是指把命令或者可执行程序的标准输出或标准错误输出重新定向到指定文件中。这样,命令或程序的输出就不显示在串口(VxWorks操作系统下是打印到串口)上,而是写入到指定文件中,即伪内存设备对应的文件句柄中。
任务重定向是指只重定向该任务,即该任务的输出不打印到串口,而是写到指定的文件,这里是指写到伪内存设备对应的文件句柄中。
写入单元12,用于调用ifconfig函数以将ifconfig函数的输出写入至伪内存设备。
由于使用了任务重定向的方式,因此其他任务的输出还是会打印到串口,即不影响其他任务,也就是说其他任务的输出不会写到伪内存设备,不会往伪内存设备写入其他内容,伪内存设备内只会有ifocnfig命令的输出。
比如,在VxWorks操作系统下输入ifconfig命令,那么在ifconfig就会输出一堆字符串在串口上,重定向后串口看不到输出,因为输出会写到指定的文件里面,打开文件就可以看到ifconfig命令的输出,在本实施例就是打开伪内存设备就可以看到ifconfig命令的输出。
查找单元13,用于在伪内存设备中查找所需的网口状态信息。
由于ifconfig函数对应的输出就是网口状态信息,因此伪内存设备中就存储了全部的网口状态信息。用户可以根据实际需求,查找所需要的网口状态信息,例如,具体通过strstr函数查找所需的网口状态信息。可以理解的是,通过strstr函数进行查找只是其中的一种实施方式,并不代表只有这一种方式。
作为优选地实施方式,网口状态信息具体包括网口的收发报文统计信息和link状态信息。
可以理解的是,网口状态信息除了上述列举的两种以外还可以包含其它的信息,这里只是一种具体的应用场景。
作为优选地实施方式,内存块的存储空间为500字节。
在具体实施中,内存块的存储空间需要根据网口的数量确定,即网口的数量越多,则包含的网口状态信息就会越多,则需要的存储空间就会越大。通常情况下,如果网口为1个或2个,则内存块的存储空间有500字节就可以满足要求。
本实施例提供的网口状态信息的获取装置,包括在VxWorks操作系统中申请一块空闲的内存块,并通过memDevCreate方法把申请的所述内存转换成伪内存设备;利用IO接口打开所述伪内存设备以得到文件句柄,并通过任务重定向的方式把标准输出定向至所述文件句柄;调用ifconfig函数以将ifconfig函数的输出写入至所述伪内存设备;在所述伪内存设备中查找所需的网口状态信息。由此可见,本装置通过伪内存设备和任务重定向方式获取ifconfig的输出结果,不需要分析协议栈代码,简单易行;另外,所用到的函数都是VxWorks操作系统通用接口函数,可移植性好,可应用在所有VxWorks操作系统的版本上。
作为优选地实施方式,任务重定向单元11,还用于恢复任务重定向以将打印输出从伪内存设备定向回到标准输出。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
以上对本发明所提供的网口状态信息的获取方法及装置进行了详细介
绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。