温馨提示×

c++ exec怎样处理执行结果

c++
小樊
81
2024-12-01 16:37:16
栏目: 编程语言

在C++中,你可以使用exec函数族来执行外部命令并处理其输出结果

#include <iostream>
#include <vector>
#include <string>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    std::vector<std::string> args = {"ls", "-l"}; // 示例命令:列出当前目录下的所有文件
    std::vector<char*> argv(args.size() + 1);
    for (size_t i = 0; i < args.size(); ++i) {
        argv[i] = const_cast<char*>(args[i].c_str());
    }
    argv[args.size()] = nullptr; // 添加空指针作为命令的结束标志

    pid_t pid = fork(); // 创建子进程
    if (pid == 0) { // 子进程
        execv("/bin/ls", argv.data()); // 执行外部命令
        perror("execv"); // 如果执行失败,打印错误信息
        exit(EXIT_FAILURE); // 退出子进程
    } else if (pid > 0) { // 父进程
        int status;
        waitpid(pid, &status, 0); // 等待子进程结束
        if (WIFEXITED(status)) { // 检查子进程是否正常结束
            std::cout << "子进程返回码: " << WEXITSTATUS(status) << std::endl;
        } else {
            std::cerr << "子进程异常结束" << std::endl;
        }
    } else { // fork失败
        perror("fork");
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

在这个示例中,我们使用fork()创建了一个子进程,然后在子进程中使用execv()执行了ls -l命令。父进程会等待子进程结束,并检查其返回状态。如果子进程正常结束,我们可以从WEXITSTATUS(status)获取到子进程的返回码。

注意:这个示例仅适用于Unix-like系统(如Linux和macOS)。如果你正在使用Windows系统,你需要使用CreateProcess()函数来创建子进程并执行外部命令。

0