在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()
打印错误信息。
在父进程中,我们等待子进程完成,然后检查其退出状态。如果子进程成功退出,我们打印其退出码;否则,我们打印一条错误信息。