在一个措施后头运行另一个措施
当前位置:以往代写 > C/C++ 教程 >在一个措施后头运行另一个措施
2019-06-13

在一个措施后头运行另一个措施

在一个措施后头运行另一个措施

问:奈何在一个措施运行后头运行另一个措施? ●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()城市返回一个暗示是否乐成地运行了所指定的措施的值,而不会返回所指定的措施的返回值。

    关键字:

在线提交作业