在一个程序里面运行另一个程序的最简单的方法是把它们依次列入一个批处理文件(扩展名为.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()都会返回一个表示是否成功地运行了所指定的程序的值,而不会返回所指定的程序的返回值。
分享到:
相关推荐
spawn-fcgi-master 是 spawn-fcgi 的官方源码,但是不能在 windows 中编译。 spawn-fcgi-win32.c 是 windows 版源码,使用 MinGW 编译:命令行输入 “gcc spawn-fcgi-win32.c -lwsock32”即可无优化地编译, 懒得...
Eclipse 进行 ANT 时错误 Javadoc failed java.io.IOException Cannot run program javadoc
Laravel开发-spawn Laravel的模板生成器。
前端开源库-gulp-spawnGulp Spawn,Gulp的Spawn插件
亲自测试通过 找了好长时间找到的 和大家分享一下 spawn-fcgi spawn-fcgi原本是lighttpd的... tar xf spawn-fcgi-1.6.3.tar.gz cd spawn-fcgi-1.6.3 ./configure --prefix=/usr/local/spawn-fcgi make && make install
posix-spawn - Rubys 快速进程::spawn基于posix_spawn() 系统接口
spawn-fcgi.exe Windows下运行
spawn-fcgi源码,nginx要调用fastcgi等等一些外部程序,就需要用到spawn-fcgi来做端口绑定。
spawn-fcgi是常用的fast cgi进程管理器,此处提供了spawn-fcgi-1.6.4的exe应用程序供大家测试使用! spawn-fcgi.exe for windows
Unity ECS和JobSystem的测试代码
Laravel开发-laravel-app-spawn Laravel自定义应用程序实例引导创建者。主要用于进行拉拉维尔特定的测试。
节点的spawn和spawnSync的跨平台解决方案。 安装 Node.js版本8及更高版本: $ npm install cross-spawn Node.js版本7及以下版本: $ npm install cross-spawn@6 为什么 在Windows上使用Spawn时,节点出现问题: ...
Spawn 特定kubectl上下文(集群)的一个shell
前端开源库-easy-spawn轻松生成,使编写子进程更容易的实用程序。
http://blog.csdn.net/wangkangluo1/archive/2011/05/11/6411721.aspx 2. 下载spawn-fcgi ,编译安装 tar zxvf spawn-fcgi -1.6.0.tar.gz cd spawn-f cgi -1.6.0 ./conifgure make make install
c++开发fastcgi应用是需要的cgi管理工具,版本是1.6.4,解压缩后,运行./configure -> make -> make install 安装
在fork()的许多常见用法中,其后是exec函数家族之一以生成子进程( Kernel#system , IO::popen , Process::spawn等),可以消除此开销通过使用特殊的进程生成接口( posix_spawn() , vfork()等) posix-spawn...
FastCGI软件开发套件“fcgi”编写FastCGI应用程序,包括fcgi-2.4.1.tar.gz和spawn-fcgi-1.6.4.tar.gz
前端开源库-cross-spawn-with-kill杀戮交叉产卵,增加交叉平台
内部包含xxfpm以及spawn-fcgi.exe,解压后根据需要选择其一即可,对于windows平台下nginx+php-cgi环境没有请求时php-cgi会自动释放的情况的解决方案,不明白的可自行百度查询相关资料,两个软件在windows Server 2003...