C++中执行外部命令主要用system()和exec系列函数:system()通过shell执行命令并返回程序,适合简单调用;exec函数族则替换当前进程映像,常与fork配合实现进程控制。

C++中执行外部命令主要通过system()和exec系列函数实现,两者用途不同:system用于调用系统shell执行命令并返回程序,而exec系列函数则用新程序替换当前进程,常用于进程替换场景。
使用system()执行外部命令
system()函数定义在cstdlib头文件中,适合简单地执行一条系统命令,比如运行可执行文件、调用脚本或执行shell指令。命令执行完毕后控制权会返回原程序。基本语法:
int system(const char* command);示例:
#include <cstdlib>
#include <iostream>
int main() {
std::cout << "开始执行外部命令..." << std::endl;
int result = system("ls -l"); // Linux/Unix
// int result = system("dir"); // Windows
if (result == 0) {
std::cout << "命令执行成功" << std::endl;
} else {
std::cout << "命令执行失败" << std::endl;
}
return 0;
}
注意:system()依赖系统shell,存在安全风险(如命令注入),不建议在高并发或安全性要求高的场景使用。
立即学习“C++免费学习笔记(深入)”;
使用exec系列函数替换当前进程
exec函数族定义在unistd.h(Unix/Linux)中,不会创建新进程,而是用新程序替换当前进程的映像。exec执行成功后,原程序代码不再运行;失败则返回-1。常见exec变体:
- execl() — 参数列表形式
- execlp() — 按PATH查找程序
- execv() — 数组传参
- execvp() — 结合PATH查找 + 数组参数
execl示例:
#include <unistd.h>
#include <iostream>
int main() {
std::cout << "即将执行 /bin/ls ..." << std::endl;
execl("/bin/ls", "ls", "-l", nullptr);
std::cerr << "exec失败!" << std::endl;
return 1;
}
execvp示例(更灵活):
char* args[] = {"ls", "-l", nullptr};
execvp("ls", args);
重点:exec之后的代码只在执行失败时运行,成功则原进程被完全替换。
system与exec的选择建议
若只是临时调用一个命令并继续运行当前程序,用system()更方便。若在fork子进程后希望子进程运行另一个程序(如实现shell功能),应配合fork和exec使用。典型fork+exec模式:
#include <unistd.h>
#include <sys/wait.h>
#include <iostream>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
execlp("ping", "ping", "-c", "4", "google.com", nullptr);
std::cerr << "exec失败" << std::endl;
} else if (pid > 0) {
// 父进程等待
wait(nullptr);
std::cout << "子进程完成" << std::endl;
} else {
std::cerr << "fork失败" << std::endl;
}
return 0;
}
基本上就这些。system适合简单调用,exec用于进程替换,搭配fork可实现完整进程控制。
以上就是c++++怎么在程序中执行外部命令_c++执行系统命令system与exec用法的详细内容,更多请关注php中文网其它相关文章!