答案:C++中执行程序的方法包括system()函数(跨平台但安全性低)、Windows的CreateProcess()(控制精细)和Linux的fork()+exec()系列(灵活高效),选择取决于平台与需求。

在C++中执行另一个程序有多种方式,具体选择取决于操作系统和需求。以下是在Windows和Linux系统下常用的方法。
使用 system() 函数(跨平台,简单)
最简单的方式是使用标准库中的 system() 函数,它定义在 cstdlib 头文件中。
示例:
#includeint main() {
system("notepad.exe"); // Windows 打开记事本
// system("gedit"); // Linux 打开文本编辑器
return 0;
}
优点:写法简单,兼容性好。
缺点:依赖系统shell,安全性较低,无法控制子进程细节。
Windows 下使用 CreateProcess()
更安全、更灵活的方式是调用Windows API CreateProcess。
立即学习“C++免费学习笔记(深入)”;
#include windows.h>#include iostream>
int main() {
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
if (CreateProcess(
L"C:\\Windows\\System32\\notepad.exe", // 程序路径
NULL, // 命令行参数
NULL, // 进程安全属性
NULL, // 线程安全属性
FALSE, // 是否继承句柄
0, // 创建标志
NULL, // 环境变量
NULL, // 当前目录
&si, // 启动信息
&pi // 进程信息
)) {
std::cout WaitForSingleObject(pi.hProcess, INFINITE); // 等待程序结束
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
} else {
std::cout }
return 0;
}
说明:
- 更精确地控制新进程的创建。
- 可等待子进程结束或并行运行。
- 需要正确处理句柄资源。
Linux 下使用 fork() 和 exec() 系列函数
在Linux/Unix系统中,通常先 fork() 创建子进程,再用 exec() 执行新程序。
#include#include
#include
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
execl("/usr/bin/gnome-calculator", "gnome-calculator", nullptr);
std::cerr return 1;
} else if (pid > 0) {
// 父进程
wait(nullptr); // 等待子进程结束
std::cout } else {
std::cerr }
return 0;
}
exec 系列函数包括:
- execl()
- execlp()
- execle()
- execv()
- execvp() 等
可根据参数格式和是否使用环境变量选择。
基本上就这些常见方法。选择哪种方式取决于你的平台和是否需要控制子进程行为。system() 最简单,但功能有限;系统API则提供更强的控制能力。










