在一个程序后面运行另一个程序

问:怎样在一个程序运行后面运行另一个程序? ●1、 在一个程序里面运行另一个程序的最简单的方法是把它们依次列入一个批处理文件(扩展名为.BAT的文件),在执行该批处理文件时,其中所列程序就会自动运行。
在C或DOS中,都没有一种特定的方法来完成“在一个程序结束后运行另一个程序”这样一种函数调用。然而,C提供了两组函数,它们允许一个程序随时可以运行另一个程序,而后者的运行将结束前者的运行。如果你将这样的函数调用放在第一个程序的末尾,就能达到上述目的。C提供的这两组函数是exec()和spawn()函数族,其中的每一个函数都具有一种区别于其它函数的功能。exec()函数族包含这样一些成员:execl()、execle()、execlpe()、execv()、execve()和execvpe()。下面列出了这中中的e,l,p和v等后缀的含义:
e 明确地把一个指向环境参数的指针数组传递给子进程
l 把命令参数上传递给要执行的程序
p 通过环境变量PATH找到要执行的函数
v 把命令行参数以一个指针数组的形式传递给要执行的程序
在程序中选用哪一个函数完全取决于你以及要执行的程序的需要。下例中的程序调用了其参数由命令行指定的另一个程序:
#include<sio.h>
#include<process.h>
char *envSing[]=
"COMM_VECTOR=0x63",
"PARENT=LAUNCH.EXE",
"EXEC=EDIT.COM",
NULL};

void main(int argc,char **argv)
{
_execvpe("EDIT.COM",argv,envSing);

printf("If you can read this sentence,the exec did'nt happen!\n");
}
上面这个短小的例子调用_execvpe()来执行DOS的文件编辑器EDIT.COM,EDIT程序的参数来自该例的命令行。在调用_execvpe函数后,上例中的程序就结束了EDIT程序退出时,你将返回到DOS提示符。如果printf语句的打印内容出现在屏幕上,则说明_execvpe()函数调用出了问题,因为如果它调用成功,就不会有上述结果。注意上例所提供的EDIT.COM的环境变量是没有任何意义的。然而如果上例要执行一个需要环境变量的程序,那么所提供的环境变量就能供给该程序使用了。
用spawn函数同样可以完成上例所做的工作。spwan()函数族包括这样一些成员:spawnl()、spawnle()、spawnlp()、spawnlpe()、spawnv()、spawnve()、spawnvp()和spawn()函数。这些函数名中的e,l,p,和v等后缀的含义与exec()函数族函数名中的相同。实际上,spawn()函数族与exec()函数族基本相同,只不过有一点小小的差别----spawn()函数既可以在结束原来的程序后启动另一个程序,也可以启动另一个程序并在该程序结束后返回到原来的程序中。spawn()函数的参数与exec()函数的基本相同,只不过需要增加一个参数----你必须用_P_OVERLAY(结束原来的程序)或_P_WAIT(结束后返回到原来的程序)作为spawn()函数的第一个参数。下例用spawn()函数完成了与前面的例子相同的工作:
#include<sio.h>
#include<process.h>
char *envSing[]={
"COMM_VECTOR=0x63",
"PARENT=LAUNCH.EXE",
"EXEC=EDIT.COM",
NULL};

void main(int argc,char **argv)
{
_spawnvpe(_P_OVERLAY,"EDIT.COM",argv,envSing);
printf("If can read this sentence,the exec did'nt happen!\n");
}
这里唯一区别是"exec"变为"spawn",并且增加了模式(mode)参数。spawn()函数有复盖和等待两种相对立的功能,它使你可以在spawn()运行期间做出是等待还是离开的决定,如果使用_P_WAIT,那么就是等待。

●2、还有一种方法可以完成在一个程序运行期间运行另一个程序,即使用system()函数。system()函数与前面讲的函数相似但也有不同的地方。除了挂起(而不是结束)当前程序去执行新的程序外,system()还需要启动COMMAND.COM命令翻译程序(或者其它任何运行在你的上命令翻译程序)。如果system()找不到COMMAND命令,那么它就不去执行所要求的程序(这一点与exec()或spawn()函数是不同的)下面的例子调用EDIT.COM编辑一个文件:
#include<sio.h>
#include<process.h>
#include<slib.h>

char argS[256];

void main(int argc,char **argv)
{
int ret;
sprintf(argS,"EDIT %s",(argv[1]==NULL?"HELLO":argv[1]));
ret=system(argS);
printf("system() returned %d\n",ret);
}
与上面的例子一样(使用_P_WAIT),在system()调用后面的printf()语句会执行。因为原来的程序只是挂起而不是终止。在每一种情况下,system()都会返回一个表示是否成功地运行了所指定的程序的值,而不会返回所指定的程序的返回值。

时间: 2024-12-02 13:15:58

在一个程序后面运行另一个程序的相关文章

Android编程实现在一个程序中启动另一个程序的方法

本文实例讲述了Android编程实现在一个程序中启动另一个程序的方法.分享给大家供大家参考,具体如下: Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用. 一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEG

怎样通过一个程序来生成另一个程序

前不久大家都在讨论怎样通过一个程序来生成另一个程序,我提出了将另一个程序当资源文件包含在程序中一起编译,然后在程序运行时根据需要再重新生成出来,下面是我的一个例子, 在这里,我将windows自带的写字板(writer.exe)当资源. 下面是源代码 //资源文件writer.exe长度为204800,在资源文件中定义为"CUSTOM"资源,编号为1111 HRSRC  hMyRes;  //resource handle HGLOBAL  hgpt;  //resource poin

java程序 不能运行-JAVA小程序开发中遇到一个问题

问题描述 JAVA小程序开发中遇到一个问题 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Studentguanli.actionPerformed(Studentguanli.java:111) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$

java教程之java程序编译运行图解(java程序运行)_java

首先我们在桌面,开始->运行->键入cmd 回车,进入windows命令行.进入如图所示的画面: 可知,当前默认目录为C盘Users文件夹下的Administrator文件夹.一般而言,我们习惯改变当前目录.由于windows有磁盘分区,若要跳到其他磁盘,例如E盘,有几种方法: 1.输入命令: pushd 路径(此命令可将当前目录设为所希望的任一个已存在的路径) 2.输入命令: e:  转移到e盘,然后再输入 cd 转移到所希望的已知路径. 如图: 希望在windows命令行下使用javac.

在Linux终端中使用后台运行模式启动程序的方法

  我们有很多可以在Linux系统中打开一个终端窗口的方法,这取决于你的选择以及你的桌面环境. 如果是使用Ubuntu的话,你可以利用CTRL+ALT+T组合键打开终端.当然你也可以使用超级键(Windows键)打开Dash,搜索"TERM",然后点击"Term"图标来打开终端窗口. 对于其他的桌面环境来说,例如XFCE.KDE.LXDE.Cinnamon以及MATE,你可以在菜单中找到终端.有些环境会在停靠栏或者面板上面包含终端图标. 通常情况下,你可以在终端里面

怎样尊重一个程序员

得知一位久违的同学来到了旧金山湾区,然而我见到他时,这人正处于一生中最痛苦的时期.他告诉我,自己任职的公司在他加入之前和之后,判若两人.录 取的时候公司对他说,我们对你在实习期间的表现和学术背景非常满意,你不用面试,甚至不用毕业拿学位,直接就可以加入我们公司成为正式员工.然而短短一年 后的今天,这位同学已经完全感觉不到公司对自己技能的尊重.Manager让他做一些乱七八糟没技术含量的事情,还抱怨说他做事太慢,并且在他的 evaluation上很是写了一笔.在人格尊严和工作安全感的双重打击之下,这

j2me程序后台运行的问题

问题描述 如何实现,让j2me程序后台运行,就是说程序可以像手机qq那样,可以让程序在后台执行而看不到.试了几个例子都不能实现,一按挂起键就退出程序了. 解决方案 解决方案二:在jad文件和jar包的配置文件里加Background:True FlipInsensitive:True MIDxlet-Resident:Y的方法试过了还是不行解决方案三:挂起键就是退出的.解决方案四:midp1.0.2.0和2.1本不支持midlet后台运行,这里就看各个厂商的扩展功能了,索爱的有些还支持多midl

visual studio-C#高手请进!在程序里打开另一程序 并且添加已有工程Add Existing Item

问题描述 C#高手请进!在程序里打开另一程序 并且添加已有工程Add Existing Item 我想写一个程序 在这个程序里打开另一个程序 并且在打开的程序里添加已有工程Add Existing Item,请问有没有什么方法 或者怎么写啊?我看word和excel都有方法 ~~~我是新手 问的可能不详细的,看明白请回答 谢谢啊~~~

c#程序-c#窗体应用程序不运行下一行怎么解决,另外在一个窗体打不开另一个窗体

问题描述 c#窗体应用程序不运行下一行怎么解决,另外在一个窗体打不开另一个窗体 c#窗体应用程序不运行下一行怎么解决,另外在一个窗体打不开另一个窗体 解决方案 要给出相关上下文说明,相关代码样例,相关错误提示.不然一个三无问题别人要帮也帮不了啊. 解决方案二: 解决方案三: c#窗体依附于另一个窗体