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

C++中执行外部命令主要通过system()和exec系列函数实现,两者用途不同:system用于调用系统shell执行命令并返回程序,而exec系列函数则用新程序替换当前进程,常用于进程替换场景。
使用system()执行外部命令
system()函数定义在cstdlib头文件中,适合简单地执行一条系统命令,比如运行可执行文件、调用脚本或执行shell指令。命令执行完毕后控制权会返回原程序。
基本语法:
int system(const char* command);
示例:
#include
#include iostream>
int main() {
std::cout int result = system(“ls -l”); // Linux/Unix
// int result = system(“dir”); // Windows
if (result == 0) {
std::cout } else {
std::cout }
return 0;
}
注意:system()依赖系统shell,存在安全风险(如命令注入),不建议在高并发或安全性要求高的场景使用。
立即学习“C++免费学习笔记(深入)”;
使用exec系列函数替换当前进程
exec函数族定义在unistd.h(Unix/Linux)中,不会创建新进程,而是用新程序替换当前进程的映像。exec执行成功后,原程序代码不再运行;失败则返回-1。
常见exec变体:
execl() — 参数列表形式execlp() — 按PATH查找程序execv() — 数组传参execvp() — 结合PATH查找 + 数组参数
execl示例:
#include
#include stream>
int main() {
std::cout execl(“/bin/ls”, “ls”, “-l”, nullptr);
std::cerr return 1;
}
execvp示例(更灵活):
char* args[] = {“ls”, “-l”, nullptr};
execvp(“ls”, args);
重点:exec之后的代码只在执行失败时运行,成功则原进程被完全替换。
system与exec的选择建议
若只是临时调用一个命令并继续运行当前程序,用system()更方便。若在fork子进程后希望子进程运行另一个程序(如实现shell功能),应配合fork和exec使用。
典型fork+exec模式:
#include
#include
#include
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
execlp(“ping”, “ping”, “-c”, “4”, “google.com”, nullptr);
std::cerr } else if (pid > 0) {
// 父进程等待
wait(nullptr);
std::cout } else {
std::cerr }
return 0;
}
基本上就这些。system适合简单调用,exec用于进程替换,搭配fork可实现完整进程控制。
以上就是c++++怎么在程序中执行外部命令_c++执行系统命令system与exec用法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1479634.html
微信扫一扫
支付宝扫一扫