Windows匿名管道技术及DOS命令重定向技术在可视化系统集成中的应用

2012-03-27 07:31王耀辉
长春工业大学学报 2012年3期
关键词:重定向命令进程

王耀辉

(中国石油东方地球物理公司,河北涿州 072751)

0 引 言

管道技术由来已久,其实质就是一部分共享的内存,以便进程间用来相互通信。不少人应该对DOS命令里的管道技术有所了解。当我们用type命令显示一个文件的时候,如果想让它分页显示,可以输入C:\>type data.txt|more,这里“|”就是管道操作符,它的作用是将左边命令的输出作为右边命令的输入,就像通过一根管道将两个命令连接在一起。如果直接输入C:\>type data.txt,就没有分页的效果了。Windows中的管道分匿名管道和命名管道两种[1-3],匿名管道只可以在本地计算机进程间通信使用,而命名管道可以用于网络间的通信。文中所用到的是匿名管道,它通过API函数CreatePipe创建。

DOS的标准输入、输出通常是在标准设备键盘和显示器上进行的,重定向顾名思义就是由用户重新指定输入和输出设备。例如,要显示C盘根目录的内容,可以输入C:\>DIR命令,然后回车,就会在显示器上显示出C盘下面的目录情况,但是如果输入C:\>DIR>1.txt,屏幕上就不会显示C盘下面的目录情况,而是将结果发送到了1.txt这个文本文件,这就是重定向。

应用Windows管道技术及DOS命令重定向技术,实现了重磁可视化处理系统的集成工作,降低了系统集成的难度。

1 常用的DOS重定向操作符

DOS中提供了一项非常强大的功能,这就是输入、输出转向命令,详细使用方法可以参考有关资料[4-5]。常用的有下面3个输入、输出重定向操作符。

1)“>”将命令输出写入到文件或设备中,而不是写在命令提示符窗口中。

2)“>>”将命令输出添加到文件末尾而不删除文件中的信息。

3)“<”从文件而不是键盘上获取命令所需的输入。

2 VB中Windows匿名管道的创建与使用

2.1 创建匿名管道

在VB中通过调用Windows API函数CreatePipe来创建管道,在使用该函数之前,首先要对其进行声明,具体如下:

其中,phReadPipe,phWritePipe分别为管道的读端和写端句柄;lpPipeAttributes为一个描述管道安全属性的结构体;nSize为管道的容量。安全属性结构在VB中的定义如下:

了解了这些之后,就可以开始创建管道了,具体代码如下:

2.2 创建DOS进程

创建管道之后,还需要创建与之连接的DOS进程,这样才能发挥管道的作用。创建DOS进程具体有以下3个步骤。

2.2.1 函数声明与变量定义

通过API CreateProcess函数来创建DOS进程,该函数在VB中的声明可以参考有关资料,在此不再赘述。

CreateProcess函数参数较多,但多数采用其默认值即可,具体参数设置可以参考相关资料,在此不一一罗列。其中,lpStartupInfo为启动信息结构体变量,在这里非常重要,它设定的是所要创建的DOS进程的窗口风格,其VB中的定义如下:

启动信息结构体的参数也比较多,但大多数可以采用默认值,需要设置的是cb,dwFlags,wShowWindow,hStdInput,hStdOutput,hStdError等参数。

2.2.2 启动参数设置

在创建DOS进程之前,需要对前面定义的结构体中的变量进行赋值,主要代码如下:

通过上面的参数设置,将DOS程序的标准输出与标准错误句柄连接到了所创建的管道的一端,当DOS程序一旦有标准输出,就会被截获到所创建的管道中去,用API ReadFile函数可以从管道中读取出这些数据,进而显示到主程序的TEXT控件中去。

2.2.3 创建进程

前面将DOS的标准输出显示到了主程序的一个文本控件中去,但是一般的DOS程序还需要输入一些参数,利用管道的读端句柄及API WriteFile函数也可以实现对DOS程序的输入工作,但文中用到的不是这种方法,在此也不做介绍,具体请参考相关资料。

文中所用方法正是前面所提到的DOS命令的重定向技术,以运行一个重磁滑动平均滤波程序为例说明如下:

首先设置CreateProcess函数的lpCommandLine参数,该参数代表要启动的DOS应用程序名称,其格式如下:

上面的“<”即为重定向操作符,由前文介绍可知,其作用是让DOS程序从文件而不是键盘上获取命令所需的输入。

设置好了Command参数,就可以创建进程了,代码如下:

程序运行界面如图1所示。

图1 程序运行界面

程序运行时,通过主程序界面对DOS子程序传递参数,在DOS子程序运行结束之后,将子程序运行结果信息通过管道传递到主程序的文本控件之中,相比“黑屏”的DOS程序,其交互性能更佳。

3 重磁数据处理系统集成

以前单位的重磁力处理程序基本上都是在DOS下运行,计算速度还可以,但操作极为不便、交互性能差。因此,在VB6.0中文企业版[6]编程环境下,文中利用管道技术与DOS命令重定向技术重新整理了这些程序,把这些分散的程序集成到一起,编制了友好的交互式的可视化软件系统,程序设计框图如图2所示。

新集成的软件系统包含地形改正、坐标转换、空间域滤波、频率域滤波等许多常用模块,与DOS程序相比,该系统拥有友好的可视化界面和丰富的功能,满足了重磁处理工作的日常需求,程序主界面如图3所示。

4 结 语

应用Windows管道技术以及DOS命令重定向技术,结合VB面向对象编程技术[7],为DOS命令行程序的可视化提供了一条简单、快捷的解决方案。该方法不仅充分利用了已有的程序资源,而且降低了系统集成的难度[8],在原有程序功能的基础上,还扩展了许多实用的新功能。集成后的软件可以运行于Windows XP,Win7等操作系统,界面简洁,使用简单,只要具有一定计算机知识和重磁资料处理经验的人员,稍微熟悉一下即可熟练应用。

图2 集成系统设计框图

图3 重磁处理系统界面

[1] 霍艳忠,郑永春,杜旭,等.Delphi中Windows管道技术的实现与应用[J].佳木斯大学学报:自然科学版,2008,26(3):345-347.

[2] 周超,虞慧群.Windows命名管道技术的分析与实现[J].电脑与信息技术,2007,15(6):18-20.

[3] 付大愚.利用管道技术实现分布式系统[J].沈阳师范大学学报:自然科学版,2004,22(3):216-219.

[4] 王春梅,张翠轩.非常网管DOS命令技术详解[M].北京:人民邮电出版社,2007.

[5] 焦舒玉.浅谈DOS操作系统的重定向输入及输出命令[J].西北民族学院学报:自然科学版,2000,21(2):24-27.

[6] 熊燕,谢芳蓬,张鹏.基于VB6.0的网络计划优化计算机模型设计[J].长春工业大学学报:自然科学版,2011,32(2):162-167.

[7] 郭加树,刘展,李旺.基于Windows管道技术的系统集成方法[J].计算机工程,2006,32(13):55-57.

[8] 蒋斌.Visual Basic 6.0程序设计[M].北京:电子工业出版社,2001.

猜你喜欢
重定向命令进程
只听主人的命令
债券市场对外开放的进程与展望
改革开放进程中的国际收支统计
解决安卓文件夹乱象
重复压裂裂缝重定向的措施研究
移防命令下达后
4G伪基站的监测定位与规避协同分析
这是人民的命令
社会进程中的新闻学探寻
俄罗斯现代化进程的阻碍