本发明涉及命令行处理技术领域,特别是涉及一种命令行界面处理系统及方法。
背景技术:
CLI(command-lineinterface,命令行界面)是指可在用户提示符下键入可执行指令的界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
依据产品需求定义,CLI处理模块需要为用户提供友好的交互接口,同时为了便于新增合并不同类型,CLI处理模块还需提供非耦合、易扩展的软件架构。此外,在实际使用过程中可实现软、硬件隔离维护,诸如exec模块负责封装具体硬件细节,user_cli模块及cli_thread模块不关心具体指令细节,仅当cmd转发至exec模块才会依据cmd具体信息进行调度处理。
鉴于此,提供一种新型命令行处理方法及系统,以满足产品特定需求是非常有必要的。
技术实现要素:
本发明的目的是提供一种命令行界面处理系统及方法,以解决现有命令行处理方法耦合性差、不易扩展的问题。
为解决上述技术问题,本发明提供一种命令行界面处理系统,包括:
用户接口进程模块、指令预处理进程模块以及指令执行进程模块;
其中,所述用户接口进程模块与所述指令预处理进程模块通过共享内存进行串联通信,所述指令预处理进程模块与所述指令执行进程模块通过消息队列进行通信;
所述用户接口进程模块用于接收用户下发的命令提示符,将所述命令提示符转发至所述指令预处理进程模块;
所述指令预处理进程模块用于对所述命令提示符进行预处理,生成对应的请求任务,通过所述消息队列转发至所述指令执行进程模块;
所述指令执行进程模块用于对所述请求任务进行调度处理。
可选地,所述用户接口进程模块包括:
区分单元,用于区分接收到的所述命令提示符的命令类型为信息查询命令或配置操作命令;
分发单元,用于根据所述命令类型分发至对应的接口;
第一转发单元,用于调用封装接口转发至所述共享内存;
查找单元,用于查找所述共享内存是否存在应答处理信息,当所述共享内存存在所述应答处理信息时,接收所述应答处理信息。
可选地,所述用户接口进程模块还包括:
合法性校验单元,用于对接收到的所述命令提示符的合法性进行校验。
可选地,所述指令预处理进程模块包括:
第一判断单元,用于判断所述共享内存是否有新请求,在所述共享内存有新请求时,封装为请求任务;
第二转发单元,用于将所述请求任务转发至所述消息队列;
处理单元,用于判断所述消息队列中是否有回应信息,在所述消息队列中有回应消息时,处理所述请求任务;
第一返回单元,用于将应答处理信息返回至所述共享内存。
可选地,所述第一判断单元具体用于:
判断所述共享内存是否有新请求,在所述共享内存有新请求时,对所述新请求进行合法性校验,校验成功后封装为预设类型的请求任务。
可选地,所述指令执行进程模块包括:
第二判断单元,用于判断所述消息队列是否有新请求,在所述消息队列有新请求时,根据请求任务查找对应的处理接口;
执行单元,用于通过所述处理接口执行所述请求任务;
第二返回单元,用于封装回应信息并返回至所述消息队列。
本发明还提供了一种命令行界面处理方法,包括:
用户接口进程接收用户下发的命令提示符,将所述命令提示符转发至指令预处理进程;
指令预处理进程对所述命令提示符进行预处理,生成对应的请求任务,通过消息队列转发至指令执行进程;
指令执行进程对所述请求任务进行调度处理。
可选地,所述用户接口进程接收用户下发的命令提示符,将所述命令提示符转发至指令预处理进程包括:
区分接收到的所述命令提示符的命令类型为信息查询命令或配置操作命令;
根据所述命令类型分发至对应的接口;
调用封装接口转发至所述共享内存;
查找所述共享内存是否存在应答处理信息,当所述共享内存存在所述应答处理信息时,接收所述应答处理信息。
可选地,所述指令预处理进程对所述命令提示符进行预处理,生成对应的请求任务,通过消息队列转发至指令执行进程包括:
判断所述共享内存是否有新请求,在所述共享内存有新请求时,则封装为请求任务;
将所述请求任务转发至消息队列;
判断所述消息队列中是否有回应信息,在所述消息队列中有回应消息时,则处理所述请求任务;
将应答处理信息返回至所述共享内存。
可选地,所述指令执行进程对所述请求任务进行调度处理包括:
判断所述消息队列是否有新请求,在所述消息队列有新请求时,则根据请求任务查找对应的处理接口;
通过所述处理接口执行所述请求任务;
封装回应信息并返回至所述消息队列。
本发明所提供的命令行界面处理系统,包括:用户接口进程模块、指令预处理进程模块以及指令执行进程模块;用户接口进程模块与指令预处理进程模块通过共享内存进行串联通信,指令预处理进程模块与指令执行进程模块通过消息队列进行通信;用户接口进程模块接收用户下发的命令提示符,将命令提示符转发至指令预处理进程模块;指令预处理进程模块对命令提示符进行预处理,生成对应的请求任务,通过消息队列转发至指令执行进程模块;指令执行进程模块对请求任务进行调度处理。本申请结合共享内存及消息队列两种IPC通信机制,实现了CLI解析流程不同阶段的非耦合封装,且便于后续新增CLI指令的扩展,具备很好的灵活性。此外,本发明还提供了一种具有上述技术优点的命令行界面处理方法。
附图说明
为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所提供的命令行界面处理系统的一种具体实施方式结构框图;
图2为本发明实施例提供的命令行界面处理方法的流程图;
图3为本发明所提供的命令行界面处理系统的总体模块关系示意图;
图4为用户接口进程的流程图;
图5为指令预处理进程的流程图;
图6为指令执行进程的流程图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明所提供的命令行界面处理系统的一种具体实施方式结构框图如图1所示,该系统包括:
用户接口进程模块1、指令预处理进程模块2以及指令执行进程模块3;
其中,所述用户接口进程模块1与所述指令预处理进程模块2通过共享内存进行串联通信,所述指令预处理进程模块2与所述指令执行进程模块3通过消息队列进行通信;
所述用户接口进程模块1用于接收用户下发的命令提示符,将所述命令提示符转发至所述指令预处理进程模块;
所述指令预处理进程模块2用于对所述命令提示符进行预处理,生成对应的请求任务,通过所述消息队列转发至所述指令执行进程模块;
所述指令执行进程模块3用于对所述请求任务进行调度处理。
需要指出的是,上述模块之间彼此相互独立,其中用户接口进程模块与指令预处理进程模块之间通过共享内存进行串联通信,指令预处理进程模块与指令执行进程模块之间通过消息队列进行串联通信。模块间采用sync与async结合方式工作,用户接口进程模块将命令提示符(cmd)转发至指令预处理进程后会进行阻塞等待,等待指令预处理进程处理完毕唤醒用户接口进程模块;指令预处理进程模块预处理完毕后通过消息队列转发至指令执行进程模块,等待指令执行进程模块执行完毕后再次唤醒指令预处理进程,然后指令预处理进程针对接收的应答进行封装处理再转发回用户接口进程模块,至此便完成了一个完整的CLI处理流程。
本发明所提供的命令行界面处理系统,包括:用户接口进程模块、指令预处理进程模块以及指令执行进程模块;用户接口进程模块与指令预处理进程模块通过共享内存进行串联通信,指令预处理进程模块与指令执行进程模块通过消息队列进行通信;用户接口进程模块接收用户下发的命令提示符,将命令提示符转发至指令预处理进程模块;指令预处理进程模块对命令提示符进行预处理,生成对应的请求任务,通过消息队列转发至指令执行进程模块;指令执行进程模块对请求任务进行调度处理。本申请各模块之间无耦合性,可依据需求自行删减指令集;并且软、硬件处理模块分离,相互之间隐藏具体实现细节,实现了CLI解析流程不同阶段的非耦合封装且便于后续新增CLI指令的扩展,具备很好灵活性。
在上述实施例的基础上,用户接口进程模块(user_cli)为独立的用户处理进程,主要负责接收用户下发cmd、合法性检测、cmd转发等任务;且命令下发后user_cli需区分其为info查询还是set配置操作然后分发至对应接口,命令需进行合法性检测如assert方式,命令封装转发调用share memory封装的write接口。本实施例中用户接口进程模块可以具体包括:
区分单元,用于区分接收到的所述命令提示符的命令类型为信息查询命令或配置操作命令;
分发单元,用于根据所述命令类型分发至对应的接口;
第一转发单元,用于调用封装接口转发至所述共享内存;
查找单元,用于查找所述共享内存是否存在应答处理信息,当所述共享内存存在所述应答处理信息时,接收所述应答处理信息。
作为一种优选实施方式,用户接口进程模块还可以进一步包括:
合法性校验单元,用于对接收到的所述命令提示符的合法性进行校验。
指令预处理进程模块(cli_thread)主要负责cmd预处理,cmd重新封装为request等任务,具备cmd监听线程,结合同步策略信号量,在无cli请求时,cli_thread接收处理线程挂起状态,新请求来临后便可解除阻塞,针对接收request进行重新检测分类然后封装为exec识别的结构体,最后通过消息队列write接口发送至消息队列。其可以具体包括:
第一判断单元,用于判断所述共享内存是否有新请求,如果有,则封装为请求任务;
第二转发单元,用于将所述请求任务转发至消息队列;
处理单元,用于判断所述消息队列中是否有回应信息,如果有,则处理所述请求任务;
第一返回单元,用于将应答处理信息返回至所述共享内存。
其中,第一判断单元具体用于:
判断所述共享内存是否有新请求,如果有,则对所述新请求进行合法性校验,校验成功后封装为预设类型的请求任务。
指令执行进程模块主要负责具体cmd的执行过程,以及cmd维护结构携带的id信息选择具体处理对象,exec指令执行进程负责具体指令的执行工作,exec监听线程侦测到新的request到来后需解析指令然后依据具体request_id选择对应处理分支,最终下发操作具体硬件模块。分支操作完毕需重新构造response应答信息返还消息队列,进而完成本次CLI操作。其可以具体包括:
第二判断单元,用于判断所述消息队列是否有新请求,如果有,则根据请求任务查找对应的处理接口;
执行单元,用于通过所述处理接口执行所述请求任务;
第二返回单元,用于封装回应信息并返回至所述消息队列。
下面对本发明实施例提供的命令行界面处理方法进行介绍,下文描述的命令行界面处理方法与上文描述的命令行界面处理系统可相互对应参照。
图2为本发明实施例提供的命令行界面处理方法的流程图,参照图2命令行界面处理方法可以包括:
步骤S101:用户接口进程接收用户下发的命令提示符,将所述命令提示符转发至指令预处理进程;
步骤S102:指令预处理进程对所述命令提示符进行预处理,生成对应的请求任务,通过消息队列转发至指令执行进程;
步骤S103:指令执行进程对所述请求任务进行调度处理。
在上述实施例的基础上,本发明所提供的命令行界面处理方法中,用户接口进程接收用户下发的命令提示符,将所述命令提示符转发至指令预处理进程的步骤可以具体包括:
区分接收到的所述命令提示符的命令类型为信息查询命令或配置操作命令;
根据所述命令类型分发至对应的接口;
调用封装接口转发至所述共享内存;
查找所述共享内存是否存在应答处理信息,当所述共享内存存在所述应答处理信息时,接收所述应答处理信息。
作为一种具体实施方式,本发明所提供的命令行界面处理方法中,所述指令预处理进程对所述命令提示符进行预处理,生成对应的请求任务,通过消息队列转发至指令执行进程包括:
判断所述共享内存是否有新请求,如果有,则封装为请求任务;
将所述请求任务转发至消息队列;
判断所述消息队列中是否有回应信息,如果有,则处理所述请求任务;
将应答处理信息返回至所述共享内存。
作为一种具体实施方式,本发明所提供的命令行界面处理方法中,所述指令执行进程对所述请求任务进行调度处理包括:
判断所述消息队列是否有新请求,如果有,则根据请求任务查找对应的处理接口;
通过所述处理接口执行所述请求任务;
封装回应信息并返回至所述消息队列。
结合图3本发明所提供的命令行界面处理系统的总体模块关系示意图,下面对本发明所提供的命令行界面处理方法的另一种具体实施方式的工作过程进行详细阐述。
该系统包括:user_cli用户接口进程、cli_thread预处理进程及exec执行进程三部分;其中user_cli与cli_thread之间通过share memory IPC机制进行通信,保证二者之间数据最快传输,但是需额外提供同步机制保证二者同步;cli_thread与exec之间采用msg_queue IPC机制进行通信,由于system v消息队列自带阻塞机制,故可省去额外同步保证机制。
图4示出了用户接口进程的流程图,user_cli接收用户下发指令,然后针对下发cmd进行校验,校验成功后依据cmd信息重新封装成request数据结构,且将request发送至共享内存区,request发送成功后,user_cli便阻塞等待读取共享内存区是否有对应answer存在,若存在相应answer则user_cli处理对应answer完成本次CLI请求任务。
图5示出了指令预处理进程的流程图,cli_thread初始化完毕便阻塞等待共享内存区是否有新请求到来,若此时存在新的request,首先需要校验request合法性,完成私有信息转存然后重新封装另一种类型的request,发送至消息队列区;类似于user_cli,cli_thread同样阻塞等待在消息队列读取接口,等待获取exec返回的确认信息;若此时检测到exec返回response信息,则将其转发至user_cli共享内存区完成本次CLI请求任务。
图6示出了指令执行进程的流程图,exec初始化完毕后同样阻塞等待在消息队列上,若此时有新请求达到,则exec读取请求,简单校验后依据request内部相关id信息查找事先注册的callback接口,通过相应注册接口完成本次CLI实际执行动作,CLI执行完毕(success or failed),exec需封装对应response数据发送至二者共享的消息队列区,进而完成本次CLI请求任务。
本发明依据特定产品开发需求,提出一种结合共享内存以及消息队列的新型CLI处理机制。本发明中软件模块无耦合性,可依据需求自行删减指令集;保证软、硬件处理模块分离,相互之间隐藏具体实现细节;为后续相关模块开发提供理念借鉴。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本发明所提供的命令行界面处理系统及方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。