`
wangxucumt
  • 浏览: 25999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

exec(),spawn(),system()的区别

 
阅读更多
   在一个程序里面运行另一个程序的最简单的方法是把它们依次列入一个批处理文件(扩展名为.BAT的文件),在执行该批处理文件时,其中所列程序就会自动运行。
   在C或DOS中,都没有一种特定的方法来完成“在一个程序结束后运行另一个程序”这样一种函数调用。然而,C提供了两组函数,它们允许一个程序随时可以运行另一个程序,而后者的运行将结束前者的运行。如果你将这样的函数调用放在第一个程序的末尾,就能达到上述目的。C提供的这两组函数是exec()和spawn()函数族,其中的每一个函数都具有一种区别于其它函数的功能。exec()函数族包含这样一些成员:execl()、execle()、execlpe()、execv()、execve()和execvpe()。
    用spawn函数同样可以完成上例所做的工作。spwan()函数族包括这样一些成员:spawnl()、spawnle()、spawnlp()、spawnlpe()、spawnv()、spawnve()、spawnvp()和spawn()函数。这些函数名中的e,l,p,和v等后缀的含义与exec()函数族函数名中的相同。实际上,spawn()函数族与exec()函数族基本相同,只不过有一点小小的差别----spawn()函数既可以在结束原来的程序后启动另一个程序,也可以启动另一个程序并在该程序结束后返回到原来的程序中。spawn()函数的参数与exec()函数的基本相同
    这里唯一区别是"exec"变为"spawn",并且增加了模式(mode)参数。spawn()函数有复盖和等待两种相对立的功能,它使你可以在spawn()运行期间做出是等待还是离开的决定,如果使用_P_WAIT,那么就是等待。
    还有一种方法可以完成在一个程序运行期间运行另一个程序,即使用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()都会返回一个表示是否成功地运行了所指定的程序的值,而不会返回所指定的程序的返回值。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics