温馨提示×

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

c++
小樊
112
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