在C++中,exec
函数用于在当前进程中执行另一个程序
以下是一个使用pipe()
、fork()
和exec()
处理错误输出的示例:
#include#include #include #include #include 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()
打印错误信息。
在父进程中,我们等待子进程完成,然后检查其退出状态。如果子进程成功退出,我们打印其退出码;否则,我们打印一条错误信息。