在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()
函数来创建子进程并执行外部命令。