VC++使用_execvpe和_spawnvpe启动程序示例

版权申诉
0 下载量 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()`系列则适合于需要创建子进程并保持父进程继续执行的情况。在选择使用哪个函数时,应根据具体需求来决定。