C++ 执行linux系统命令并获取标准和异常输出流以及退出码
时间: 2024-10-21 21:08:12 浏览: 26
在Linux中执行和验证成功的流程执行
在C++中,你可以通过`<cstdlib>`头文件中的`system()`函数或者`<iostream>`下的`std::stringstream`结合`popen()`函数来执行Linux系统命令,并获取其标准输出(stdout)和标准错误输出(stderr)。下面是一个简单的示例:
```cpp
#include <cstdlib>
#include <sstream>
#include <cstdio>
int main() {
// 执行命令(这里以ls -l作为例子)
const char* command = "ls -l";
FILE *output = popen(command, "r"); // "r"参数表示读取
if (!output) {
std::cerr << "Failed to execute the command!" << std::endl;
return 1; // 返回值表示退出状态
}
// 获取标准输出和错误输出
std::string stdout_string, stderr_string;
char buffer[1024];
while (fgets(buffer, sizeof(buffer), output)) {
if (feof(output)) break; // EOF标志检查
if (strstr(buffer, "error")) { // 根据需要判断是否是错误输出
stderr_string += buffer;
} else {
stdout_string += buffer;
}
}
// 关闭流
pclose(output);
// 打印结果
std::cout << "Standard Output:\n" << stdout_string << std::endl;
std::cerr << "Error Output:\n" << stderr_string << std::endl;
// 从系统命令返回值获取退出码(Unix/Linux)
int exit_code = WEXITSTATUS(waitpid(-1, NULL, 0));
std::cout << "Exit code: " << exit_code << std::endl;
return exit_code;
}
```
在这个示例中,我们首先使用`popen()`打开一个指向命令行输入/输出的管道,然后通过`fgets()`逐行读取输出。`WEXITSTATUS()`函数用于从waitid系统调用中提取进程的退出状态码。
阅读全文