admin 管理员组文章数量: 1087652
2024年3月13日发(作者:diagram怎么读)
第33卷第3期
长春工业大学学报(自然科学版)
V01.33 No.3
2012年O6月
Journal of Changchun University of Technology(Natural Science Edition)
Jun.2012
Windows匿名管道技术及DOS命令重定向技术
在可视化系统集成中的应用
王耀辉
(中国石油东方地球物理公司,河北涿州072751)
摘 要:Windows管道技术可以实现不同进程间的数据传递,而DOS命令重定向技术可以实
现输入、输出的转向,结合这两项技术,实现了DOS命令行程序的可视化。文中介绍了在VB
编程环境下,利用Windows API函数创建管道并使用管道的方法。通过这种方法实现了对原
有DOS重磁处理程序的可视化集成工作。
关键词:Windows管道;重定向;Windows API
中图分类号:TP311 文献标志码:A 文章编号:1674—1374(2012)03—0274—04
Appl ication of anonymous pipe and DOS command re—direction
in the visual system integration
WANG YaO—hui
(Bureau of Geophysics Prospecting Inc.China National Petroleum Corporation,Zhuozhou 072751,China)
Abstract:Data transformation among different processes can be realized with Windows pipe
technology,while the input and output exchange by the DOS program re—direction.DOS program
visualization can be realized by combining the two technologies.We introduce a method to create the
pipe with Windows API function under VB programming environment to fulfill the visualization
integration of the original gravity and magnetic DOS program.
Key words:Windows pipe;re—direction;Windows API.
显示,可以输入C:\>type data.txt l more,这里
0 目
“l”就是管道操作符,它的作用是将左边命令的输
管道技术由来已久,其实质就是一部分共享
出作为右边命令的输入,就像通过一根管道将两
的内存,以便进程间用来相互通信。不少人应该
个命令连接在一起。如果直接输入C:\>type
对DOS命令里的管道技术有所了解。当我们用
data.txt,就没有分页的效果了。Windows中的
type命令显示一个文件的时候,如果想让它分页
管道分匿名管道和命名管道两种ll。”],匿名管道只
收稿日期:20l2一O2 26
作者简介:王耀辉(1977一),男,汉族,河南洛阳人,中国石油东方地球物理公司工程师,主要从事重磁资料处理与解释技术方向研
究,E—mail:cnpcwyh@163.com.
第3期 王耀辉:Windows匿名管道技术及DOS命令重定向技术在可视化系统集成中的应用
End Fype
275
可以在本地计算机进程间通信使用,而命名管道
可以用于网络间的通信。文中所用到的是匿名管
~
了解了这些之后,就可以开始创建管道了,具
道,它通过API函数CreatePipe创建。
DOS的标准输入、输出通常是在标准设备键
盘和显示器上进行的,重定向顾名思义就是由用
户重新指定输入和输出设备。例如,要显示C盘
根目录的内容,可以输入C:\>DIR命令,然后回
车,就会在显示器上显示出C盘下面的目录情
况,但是如果输入C:\>D1R>1.txt,屏幕上就不
会显示C盘下面的目录情况,而是将结果发送到
了1.txt这个文本文件,这就是重定向。
应用Windows管道技术及DOS命令重定向
技术,实现了重磁可视化处理系统的集成工作,降
低了系统集成的难度。
1 常用的DOS重定向操作符
DOS中提供了一项非常强大的功能,这就是
输入、输出转向命令,详细使用方法可以参考有关
资料 。常用的有下面3个输入、输出重定向操
作符。
1)“>”将命令输出写入到文件或设备中,而
不是写在命令提示符窗口中。
2)“>>”将命令输出添加到文件末尾而不删
除文件中的信息。
3)“<”从文件而不是键盘上获取命令所需的
输入。
2 VB中Windows匿名管道的创建与使用
2.1创建匿名管道
在VB中通过调用Windows API函数Cre—
atePipe来创建管道,在使用该函数之前,首先要
对其进行声明,具体如下:
Private Declare Function CreatePipe I ib”kernel32”
(phReadPipe As Long,phWritePipe As Long。lpPipeAt—
tributes As SECURITY
—
ATTRIBUTES,ByVal nSize As
Long)As Long
其中,phReadPipe,phWritePipe分别为管道
的读端和写端句柄;lpPipeAttributes为一个描述
管道安全属性的结构体;nSize为管道的容量。安
全属性结构在VB中的定义如下:
Private Type SECURITY
——
ATTRIBUTES
nI ength As Long//结构体的大小
lpSecurityDescriptor As Long//安全描述符
blnheritHandle As Long//决定管道能否被继承
体代码如下:
Dim Sec As SECURIT ATTRIBUTES//定义Sec
为安全属性结构体
Dim phReadPipe As Long//读端句柄
Dim phWritePipe As Long//写端句柄
With Sec//设置安全属性
.
nI ength=LenB(See)
.
bInheritHandle=True
.
1pSecu rityDesc riptor-二0
End With
ret—CreatePipe(phReadPipe,phWritePipe,Sec,
0)
2.2创建DoS进程
创建管道之后,还需要创建与之连接的DOS
进程,这样才能发挥管道的作用。创建DOS进程
具体有以下3个步骤。
2.2.1 函数声明与变量定义
通过API CreateProcess函数来创建DOS进
程,该函数在VB中的声明可以参考有关资料,在
此不再赘述。
CreateProcess函数参数较多,但多数采用其
默认值即可,具体参数设置可以参考相关资料,在
此不一一罗列。其中,lpStartupInfo为启动信息
结构体变量,在这里非常重要,它设定的是所要创
建的DOS进程的窗口风格,其VB中的定义如
下:
Private Type STARTUPINFO
cb As Long//结构体大小
dwFlags As Long//决定哪个参数有效
wShowWindow As Integer//窗口状态
hStdInput As Long//标准输入句柄
hStdOutput As Long//标准输出句柄
hStdError As Long//标准错误句柄
End Type
启动信息结构体的参数也比较多,但大多数
可以采用默认值,需要设置的是cb,dwFlags,
wShowWindow,hStdInput,hStdOutput,hStdEr—
ror等参数。
2.2.2启动参数设置
在创建DOS进程之前,需要对前面定义的结
构体中的变量进行赋值,主要代码如下:
With Si//si为启动信息结构体
.
cb—I enB(Si)
276 长春工业大学学报(自然科学版) 第33卷
.
dwFlags—STARTF
—
USESHOWWINDOW Or
STARTF.USESTDHANDLES
.
wShowWindow一0
.
hStdOutput—phWritePipe//将DOS标准输出连
接到管道写端句柄
.
hStdError—phWritePipe//将DOS错误输出连接
到管道写端句柄
End With
通过上面的参数设置,将DOS程序的标准输
出与标准错误句柄连接到了所创建的管道的一
端,当DOS程序一旦有标准输出,就会被截获到
所创建的管道中去,用API ReadFile函数可以从
管道中读取出这些数据,进而显示到主程序的
TEXT控件中去。
2.2.3创建进程
前面将DOS的标准输出显示到了主程序的
一
个文本控件中去,但是一般的DoS程序还需要
输入一些参数,利用管道的读端句柄及API
WriteFile函数也可以实现对DOS程序的输人工
作,但文中用到的不是这种方法,在此也不做介
绍,具体请参考相关资料。
文中所用方法正是前面所提到的DOS命令
的重定向技术,以运行一个重磁滑动平均滤波程
序为例说明如下:
首先设置CreateProcess函数的lpCom—
mandLine参数,该参数代表要启动的DOS应用
程序名称,其格式如下:
Command一”e:\windows\system32\cmd ,c”
+Chr(32)+”d:\adf.exe”+Chr(32)+”<”+”e:\
para.txt’ ’
上面的“<”即为重定向操作符,由前文介绍
可知,其作用是让DOS程序从文件而不是键盘上
获取命令所需的输入。
设置好了Command参数,就可以创建进程
了,代码如下:
Dim Si As STARTUPINFO
ret—CreateProcess(vbNullString,Command,Sec,
Sec,True,NORMAI
一
PRIORITY
—
CLASS,ByVal 0,vb—
NuUString,Si,Pi)//创建进程
Do
ret—ReadFile(phReadPipe,str,4096,lngBytes—
Read.ByVal O)
Result—Result&Left(str.1ngBytesRead)
Loop While(ret<>O)
Textl—Result//将DOS程序运行结果显示到主
程序文本控件中
程序运行界面如图1所示。
图1程序运行界面
程序运行时,通过主程序界面对DOS子程序
传递参数,在DOS子程序运行结束之后,将子程
序运行结果信息通过管道传递到主程序的文本控
件之中,相比“黑屏”的DOS程序,其交互性能更
佳。
3重磁数据处理系统集成
以前单位的重磁力处理程序基本上都是在
DOS下运行,计算速度还可以,但操作极为不便、
交互性能差。因此,在VB6.0中文企业版 编程
环境下,文中利用管道技术与DOS命令重定向技
术重新整理了这些程序,把这些分散的程序集成
到一起,编制了友好的交互式的可视化软件系统,
程序设计框图如图2所示。
新集成的软件系统包含地形改正、坐标转换、
空间域滤波、频率域滤波等许多常用模块,与
D0S程序相比,该系统拥有友好的可视化界面和
丰富的功能,满足了重磁处理工作的日常需求,程
序主界面如图3所示。
4 结 语
应用Windows管道技术以及DOS命令重定
向技术,结合VB面向对象编程技术¨7],为DOS
命令行程序的可视化提供了一条简单、快捷的解
决方案。该方法不仅充分利用了已有的程序资
源,而且降低了系统集成的难度 ],在原有程序功
能的基础上,还扩展了许多实用的新功能。集成
后的软件可以运行于Windows XP,Win7等操作
系统,界面简洁,使用简单,只要具有一定计算机
知识和重磁资料处理经验的人员,稍微熟悉一下
第3期 王耀辉:Windows匿名管道技术及D()s命令重定向技术在可视化系统集成中的应用 277
即可熟练应用。
] ] ] ] ]
图2集成系统设计框图
版,2008,26(3):345—347.
周超,虞慧群.Windows命名管道技术的分析与实
现[J].电脑与信息技术,2007,15(6):18-20.
付大愚.利用管道技术实现分布式系统EJ3.沈阳师
范大学学报:自然科学版,2004,22(3):216-219.
王春梅,张翠轩.非常网管DOS命令技术详解[M].
北京:人民邮电出版社,2007.
焦舒玉.浅谈DOS操作系统的重定向输入及输出命
令[J].西北民族学院学报:自然科学版,2000,21
(2):24—27.
熊燕,谢芳蓬,张鹏.基于VB6.0的网络计划优化计
算机模型设计EJ3.长春工业大学学报:自然科学版,
图3重磁处理系统界面
2011,32(2):l62一l67.
郭加树,刘展,李旺.基于Windows管道技术的系统
参考文献:
[1]霍艳忠,郑永春,杜旭,等.Delphi中Windows管道
技术的实现与应用[J].佳木斯大学学报:自然科学
集成方法EJ5.计算机工程,2006,32(13):55—57.
蒋斌.Visual Basic 6.0程序设计[M].北京:电子工
业出版社,2001.
版权声明:本文标题:Windows匿名管道技术及DOS命令重定向技术在可视化系统集成中的应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710268639a565294.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论