VC++使用_execvpe和_spawnvpe启动程序示例
版权申诉
123 浏览量
更新于2024-09-09
收藏 4KB TXT 举报
"VC++ 在一个程序后运行另一个程序的方法"
在VC++编程中,有时候我们需要在当前程序执行完毕后启动另一个程序。这通常通过调用特定的系统函数来实现,比如`exec()`系列和`spawn()`系列函数。这两个函数族都是C标准库中的过程控制函数,用于在当前进程上下文中启动新的程序。
`exec()`系列函数主要用于替换当前进程的映像,也就是说,当前进程被新启动的程序所替代。这个系列包括`execl()`, `execlp()`, `execlpe()`, `execv()`, `execve()`, 和 `execvpe()`。它们的主要区别在于参数的传递方式和环境变量的处理。例如,`execvpe()`允许我们指定环境变量的同时执行新的程序,如果调用成功,当前进程将不再继续执行,而是由新启动的程序接管。
下面的代码示例展示了如何使用`execvpe()`函数启动`EDIT.COM`:
```c
#include<stdio.h>
#include<process.h>
char*envString[] = {
"COMM_VECTOR=0x63",
"PARENT=LAUNCH.EXE",
"EXEC=EDIT.COM",
NULL};
void main(int argc, char argv) {
_execvpe("EDIT.COM", argv, envString);
printf("If you can read this sentence, the exec didn't happen!\n");
}
```
在这个例子中,如果`_execvpe()`成功执行,程序不会继续执行到`printf()`,因为当前进程已经被`EDIT.COM`替换。如果无法启动`EDIT.COM`,则会继续执行后面的代码,输出错误提示。
另一方面,`spawn()`系列函数则会在当前进程中创建一个新的子进程来运行新的程序,而原始进程会继续执行。`spawn()`系列包括`spawnl()`, `spawnle()`, `spawnlp()`, `spawnlpe()`, `spawnv()`, `spawnve()`, `spawnvp()`以及`spawnvpe()`。这些函数与`exec()`类似,但它们创建的是独立的子进程,而不是替换当前进程。例如,`_spawnvpe()`允许指定环境变量并创建子进程执行程序。
下面的代码示例展示了如何使用`_spawnvpe()`函数,并设置标志 `_P_OVERLAY`,表示等待子进程结束:
```c
#include<stdio.h>
#include<process.h>
char*envString[] = {
"COMM_VECTOR=0x63",
"PARENT=LAUNCH.EXE",
"EXEC=EDIT.COM",
NULL};
void main(int argc, char argv) {
_spawnvpe(_P_OVERLAY, "EDIT.COM", argv, envString);
printf("Spawned EDIT.COM successfully!\n");
}
```
在这个例子中,由于设置了 `_P_OVERLAY` 标志,主程序会等待`EDIT.COM`执行完成后再继续执行后面的代码。
`exec()`系列适用于那些希望完全替换当前进程,让新程序接管的场景,而`spawn()`系列则适合于需要创建子进程并保持父进程继续执行的情况。在选择使用哪个函数时,应根据具体需求来决定。
129 浏览量
2010-07-12 上传
2008-10-14 上传
2023-06-02 上传
2021-03-15 上传
2009-12-17 上传
2015-04-05 上传
lj_70596
- 粉丝: 101
- 资源: 3935
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章