温馨提示×

c++ exec如何处理错误输出

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

在C++中,exec函数用于在当前进程中执行另一个程序

以下是一个使用pipe()fork()exec()处理错误输出的示例:

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

int main() {
    pid_t pid = fork();

    if (pid == 0) { // 子进程
        // 将错误输出重定向到标准输出
        dup2(STDOUT_FILENO, STDERR_FILENO);

        // 执行外部程序
        char *argv[] = {"/bin/ls", "-l", NULL};
        execvp(argv[0], argv);

        // 如果execvp()失败,将返回-1
        perror("execvp");
        return 1;
    } 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 {
        std::cerr << "fork()失败" << std::endl;
        return 1;
    }

    return 0;
}

在这个示例中,我们首先使用fork()创建一个子进程。在子进程中,我们将错误输出重定向到标准输出(STDOUT_FILENO),然后使用execvp()执行外部程序。如果execvp()失败,它将返回-1,我们可以通过perror()打印错误信息。

在父进程中,我们等待子进程完成,然后检查其退出状态。如果子进程成功退出,我们打印其退出码;否则,我们打印一条错误信息。

0