APP下载

监控系统中间结果的截取技术研究与实现

2016-12-01

数字通信世界 2016年1期
关键词:重定向命令提示符调用

金 伟

(上海广播电视台技术运营中心,上海 200072)

监控系统中间结果的截取技术研究与实现

金 伟

(上海广播电视台技术运营中心,上海 200072)

针对广电行业设备多、类型复杂、监控程序多且难以用一种方法进行监控的现状,本文采用一种变通的方式,利用设备或系统自身所提供的功能,通过截取技术获取的中间运行结果,将其结果为我所用。最后,通过程序验证了该方法的可行性和有效性。

重定向;管道;广电行业;设备监控;SNMP

1 引言

电视台的播出系统,关系到政府宣传的有效性,因而在设备的选型中,常常会直接采购完整的、成熟的成套软件硬件系统。这样做的缺点是导致各个系统相对独立,各自为政,系统之间耦合度很低。有时几套软件在做相同的工作,却不能共享结果,或者将上游设备的输出,作为下游设备的输入,达到无缝对接。在电视节目的监控系统的开发中,上述问题经常出现。从编程的角度来看,我们常常会遇到有时所要做的程序功能,别人早已作出来了,而自己目前却感觉无所下手。如果能有一个办法,及时获取某一个程序或某一个系统的输出,那么监控程序就可以事半功倍,达到良好的效果。

纵观广电行业的设备系统,主要由硬件设备和所配套的软件系统组成。考虑到硬件设备一般都有固定的接口用于通信,所以本文不予考虑;而对于软件系统中,又分为Linux操作系统和Windows操作系统两大块,Linux操作系统中的设备程序多以后台方式运行,较少有界面展示和数据的输入输出,所以下面以Windows操作系统为例进行说明,但所涉及的技术和原理,同样适用于Linux,只是所调用的函数名,则要查Linux下各开发库的使用手册。

2 原理介绍

在Windows下,任何内部命令或程序,都可以通过“命令提示符”的方式运行,并且,支持命令提示符方式运行的程序,也会在同一个命令提示符中,将程序中间运行过程中的输出内容、最终的输出结果一起输出到命令提示符中。用户通过命令提示符中的文字变化,就知道了当前程序的运行状况。上面的介绍中主要存在两个问题:一是命令的运行,需要人为手工打开“命令提示符”(即command.com命令),然后再手工输入要运行的命令;二是程序随后运行过程输出的中间结果和最终结果,都只是显示在屏幕上,无法保存到文件中进行分析。

解决这一问题并不难,在一直以来的计算机设计中,计算机都由“输入系统”作为数据输入端,“输出系统”作为结果的输出端。其中的“输入系统”,除了常见的鼠标、键盘之外,还有就是命令的调用,对于上述内容的输入,我们可以仿真一个命令提示符,然后“代替”键盘输入要运行的程序名称,也可以直接调用操作系统的进程启动接口,直接运行某个程序;“输出系统”除了屏幕、打印机之外,还有就是指定到某个文件中。

从监控系统的开发角度来看,上述的问题就可以理解为要获得一套系统的监控结果,只需要在不涉及版权和使用权的前提下,直接调用对方的程序,然后将其结果写入到某个指定的文件中,再通过分析软件对该文件进行分析,即可以达到所需的监控的效果。

3 运行一个监控程序的方法

要想运行一个命令或将某一个程序作为一个命令运行有四种方法,每一种的效果不一样在,编程的复杂度也不一样在。

第一个能完成此功能的函数是system函数,该函数的优点是仿真了上述提到的“命令提示符”,所以函数在调用的时候,会自动打开一个DOS命令提示符的窗口,在窗口中执行该命令,并将命令结果显示在DOS窗口中。这一特性也意味着,只要能在“命令提示符”中完成的操作,该函数都可以完成。该函数的原型是:

如果system函数的返回值非0,则表示程序运行成功,否则表示有错误发生。而命令中的参数command,是一个字符串指针,该指针指向的地址中可以保存任何一个合法的DOS命令串,该命令串的格式、个数等属性取决于该DOS命令本身的要求。

第二个能完成运行程序的函数是WinExec函数,比起system函数,WinExec函数有了一定的进步,WinExec函数同样是将命令串在DOS窗口中执行,但用户可以选择该DOS窗口是否显示。同时该命令主要是完成对可执行文件的调用执行操作,要调用内部命令一般不用此命令。该函数的原型是:

WinExec函数如果调用成功,返回一个大于31的值。否则都视为失败。命令的参数中,lpCmdLine是一个字符串指针,它的意义与system函数的command参数相同。参数uCmdShow的作用指明DOS命令提示符窗口的显示方式。调用者可以指定不显示,或以最小化、最大化、默认方式显示。

第三个方式就是调用ShellExecute函数,该函数的原型为:

该函数的作用主要是执行可执行文件,如果调用成功,返回一个大于32的值。否则就视为失败,其参数较多,但对于监控程序来说,只需要将其中参数lpVerb设置为“Open”,将参数lpFile设置为要运行的监控程序的文件名即可。其他参数均可设置为NULL,以便告诉系统采用默认的方式进行运行即可。

第四个方式,也是最适合的方式,就是调用CreateProcess函数,该函数的原型是:

若函数调用成功,则返回值不为0;若函数调用失败,返回值为0。参数较多,但其实只有参数lpCommandLine是最重要的,这就是要执行的命令行。其余各参数使用NULL或默认值即可。

4 获取程序运行结果的办法

通过上面的方法,只是完成了让一个程序运行,无论是在运行过程中是否弹出“命令提示符”,其结果都只是一闪而过,甚至看不到。要想看到结果,还需要使用“重定向”技术和“管道”技术。

“重定向”(redirect)就是将系统默认的输出端,修改为程序指定的输出端,将原来输出向默认输出端的数据,转向重新定向到指定的输出端上。如前所述,系统默认的输出端是屏幕,如果通过程序人为将输出端改为打印机,那么原本要显示在屏幕上的内容,将会通过打印机直接打印出来,俗称“截屏打印”。只不过,对于监控程序来说,是将默认的输出端重新定向到指定的文件中,这样可以将直接显示在屏幕上的内容,按屏幕上的显示格式,保存到指定的文件中。

重定向的符号有两个:一个是重定向“输入设备”的,用半角“<”表示;一个是重定向“输出设备”的,用半角“>”表示,并且二者可以同时使用。例如某一个程序的名称为snmputil.exe,程序运行以后,需要依次要读取的设备OID,并且将结果保存到device.txt中,那么可以先将要读的OID按实际输入顺序事先保存在oid.txt文件中。然后通过“snmputildevice.txt”命令,即可以在自动完成输入的前提下,将读取到的结果,写入到device.txt文件中。

重定向命令执行以后,就可以打开所生成的文件查看结果了,当然也可以编写一个程序打开这一文件,然后通过对结果的句法分析,判断原来程序snmputil的运行效果,或者直接从中提取读取的值。

重定向命令有一个不足,如果某个程序执行时间很长,那么在程序的运行过程中,虽然重定向文件被生成了,但是由于文件处于锁定状态,所以此时是无法读取所生成文件的内容的。针对这种情况,如果要实时获得中间数据,就需要使用另一种更先进,但也更复杂的技术,即管道(pipe)技术。

“管道技术”是将某一个程序的输出,通过“管道”作为另一个设备的输入。从原理上讲,重定向技术与管道技术很相似,前者表示的是将某一设备的输出由默认输出设备改为另一个指定的输出设备上;后者表示的是将一个设备的输出作为另一个设备的输入。但管道需要有一个输出端和一个输入端,同重定向一样,二者既可以是设备,也可以是文件,甚至是操作系统提供的内部命令。

在Windows的“命令提示符”中,管道的符号是半角“|”符号。以Windows和Linux中都有,且很常用的ping命令为例,单独输入“ping <某IP地址>”会将当前目录下的文件列表显示于屏幕上,但如果输入“ping <某IP地址>|more”则表示将列表通过管道发送到more命令中,而more命令除了将内容显示在显示器上之外,还要将显示的内容进行分页,当显示的内容超过一页时,只显示当前页,当用户按下空格键后,显示下一页,如此往复,直到全部显示完。

要完成“重定向”,只要在命令行中,使用重定向的符号即可,但要实现管道,则需要使用函数,编写程序了,要创建一个管道的函数为CreatePipe函数,如下所示:

Create Pipe可以创建一个管道,如果功能调用成功,则返回一个非0值;否则返回0。参数h Read Pipe指向一个接收读句柄的指针;参数hWritePipe指向一个接收写句柄的指针。参数nSize用于指定管道的长度。该管道创建完毕后,可以通过ReadFile函数和WriteFile函数进行读写操作。在用ReadFile函数读的时候,只有当另有一个进程或线程写满了管道,ReadFile函数才会返回真,并且返回读到的字节数;否则返回错误。在用WriteFile函数到管道中,如果管道缓冲区不满,则写操作不会结束;如果所有字节写完之前,管道已满,则WriteFile函数无法返回,直到另有一个进程或线程使用ReadFile函数读取管道中的内容后,使空间可以使用后,WriteFile函数才能继续写入剩下的字节。

5 通过程序进行验证

有了上述基础,就可以将上述技术融会贯通,结合使用。在广电行业的设备中,多数设备都支持“简单网络管理协议”(SNM),该协议的特点就是:每一个设备都可以指定为一个IP地址,设备中的每一个独立的参数,都起一个名字,该名字就是OID值,通过IP地址和OID值,就可以唯一确定一个设备的具体参数。对该参数的操作有“读”(GET)操作,“读下一个”(GETNEXT)操作和“写”(SET)等操作。

在微软MSDN中,有一个完整的SNMP协议程序源代码,编译后生成文件即为前面提到过的snmputil程序。从命令行的角度,例如要读到指定IP地址所对应的设备上,指定OID的值,则只要在“命令提示符”中使用“snmputil GET public ”即可。

要完成对该设备的监控,一种办法就是将每次运行结果生成到一个文件中,然后对该文件的内容进行分析,其核心代码为:

代码执行结束后,snmputil的运行结果会自动保存在Redirect.txt文件中。以供其他程序调用分析。使用管道方式,虽然程序会较复杂,但由于省去了中间文件生成环节,所以效率更高,限于代码较长,本文中不再赘述。

为了验证上述理论和功能,本人特在Windows XP操作系统下,使用Visual C++6.0编写了一个测试程度,通过测试可知,上述方式有效,完全可以嵌入到设备监控程序当中,作为一种监控方法。通过移植,也不难验证,该程序及方法,都可以不做任何修改地直接运行在Windows所有其他版本操作系统上,也可以不做修改地直接移植到其他版本Visual C++上。其效果如图1所示。

图1 通过截取snmputil工具的输出对设备进行监控

如图1所示,snmputil程序本身就支持通过SNMP协议对设备进行监控的功能。而对于本系统来说,重新编写一个snmputil程序大可不必,因而就通过上述技术调用该程序,并通过对“中间结果的拦截技术”对其结果进行截取,使原本需要“命令行提示符”,由键盘输入的内容,改由测试程序的“DOS命令或可执行文件”文本框中完成;原本输出到屏幕的内容,也被重定向到程序的“命令执行结果”文本框中。如果将读取到的结果,与直接命令行的结果进行对比,不难发现二者完全一样。

6 结束语

广电设备多而杂。如果对所有的设备的监控都从头开发,不仅工作量巨大,而且也难以确保系统监控的准确无误。而巧妙地使用系统自身提供的工具,或者是使用已经过验证的程序,借助“他山之石”,达到节约成本、加快开发效率的效果。本文正是基于这一想法,通过软件开发中常用的,通过程序函数调用的方式,调用命令行的程序,然后再借助于“重定向技术”和“管道技术”,将原本输出到屏幕上的内容,导入到文件中,甚至是另一个直接分析处理的程序中,就可以达到“可以攻玉”的效果。并且,通过实际的代码开发,验证了该方法是可行的,并且是有效的,完全可以应用于监控类程序的开发中。■

[1] 黄可杰,马莉.Linux环境下I/O重定向与异步通信的实现[J].计算机应用与软件,2011.28(3)

[2] 付晓波.基于SNMP的数字电视前端设备监控系统的设计[J].电视技术,2013.37(23)

[3] 李瑞民.独辟蹊径的编程思维——“拿来主义”编程[B].北京:电子工业出版社,2013.6

“互联网+”运维,易诺光纤熔接机品质服务斩获殊荣

近日,中国通信网络运营维护服务年会在北京举行,与会者围绕“互联网+”形势下通信网络运维服务的转型和创新等话题进行深入讨论,并开展同期推进活动。易诺仪器在众多通信企业中脱颖而出斩获两项大奖,即“2014-2015年度通信网络运营维护服务用户满意企业”,同时,易诺仪器(上海)有限公司中国区总裁车政炫被评为“2015年通信网络运营维护服务年度人物”。

“互联网+”形势下滋生不同网络建设形态,易诺推出View系列产品制胜网络建设运维。View系列单芯熔接机以快速精准熔接、高效耐用的品质在光纤网络改造中发挥极大效用;View系列带状光纤熔接机则因芯数不同为运营商建网带来更多选择。如12芯适宜城市大容量环网布放,4芯适宜广电FTTH光纤入户建设等。近年来城市与农村光网同时推进建设,装维人员需要在各类特殊环境下施工,View系列光纤熔接机高性价比、高续航能力和防尘防震等特性则完美经受住考验,为网络运维提供保障。

针对光纤熔接机的特殊工作环境,易诺特设移动服务车,上门为客户实际解决问题,提供多元服务。今年,易诺服务车来到黑龙江移动应急技能比武、杭州“光翼杯”技能竞赛现场,提前为客户调试好熔接机与配件,帮助比赛顺利进行。易诺服务车配备精良,随车工程师在第一时间洞悉客户需求,为客户带来现场抢修、产品维护等服务。技术与经验丰富的易诺工程师更定期上门拜访进行培训,以帮助客户更好使用产品。对于我们的真诚服务,许多客户欣慰于服务车的高频率拜访与高效解决问题能力,并表示我们的服务为他们网络建工提供极大支持保障。

此外,易诺仪器拥有一套灵活完善的服务链。目前在全国范围内均有固定服务网点,用户无论身处何方都可以通过电话、电子邮件、公司网站以及易诺各地区代理商等不同方式联系到就近服务网点并及时得到回复。4S移动服务车为客户提供产品销售(Sale)、配件供应(Spare part)、售后服务(Service)和信息回馈(Survey)这样四位一体的移动服务模式,方便客户灵活掌握信息。“固定+移动”式服务体系为客户带来更多选择,也促进了双方沟通交流。

在服务中收获用户满意,是我们前行的最大动力。易诺仪器有感于网络运营维护服务之道在通信发展中起到的重要作用,在今后亦将精益求精,为客户打造完美服务品质!

Research and Implementation of Interception Technology of Intermediate Results in Monitoring System

Jin Wei
(Shanghai Media Group Technical Center, Shanghai, 200072)

It is difficult to use one method to monitor all the things in Radio and television industry because of huge number of complicated types equipment and monitoring systems. In the essay, we will introduce a new method, which uses interception technology to get intermediate results with the help of functions offered by equipment and system. The feasibility and effect of this method has been verified by the program.

Redirection; Pipe; Radio and television industry; Equipment monitoring; SNMP

10.3969/J.ISSN.1672-7274.2016.01.005

TP31 文献标示码:B

1672-7274(2016)01-00020-05

猜你喜欢

重定向命令提示符调用
一条命令恢复Windows开机F8功能
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
解决安卓文件夹乱象
让命令提示符窗口与Windows更融洽
重复压裂裂缝重定向的措施研究
4G伪基站的监测定位与规避协同分析
基于系统调用的恶意软件检测技术研究
Windows命令模式另类用法
基于马氏体重定向的铁磁形状记忆合金本构理论分析