c++怎么在程序中执行外部命令_c++执行系统命令system与exec用法

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

c++怎么在程序中执行外部命令_c++执行系统命令system与exec用法

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 03:57:28
下一篇 2025年12月19日 03:57:40

相关推荐

发表回复

登录后才能评论
关注微信