捕获一个函数的标准输出, 在函数执行完成后恢复, c++语言
时间: 2024-05-15 21:17:54 浏览: 13
可以使用文件输入/输出流来实现这个功能。具体来说,首先需要创建一个文件,并将其用作标准输出流。然后,调用函数,该函数的输出将重定向到该文件。完成函数执行后,恢复标准输出流并读取文件内容即可。
以下是实现该功能的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int capture_function_output(char *command) {
// 创建临时文件并将其用作标准输出流
FILE *fptr = tmpfile();
int original_stdout = dup(fileno(stdout));
dup2(fileno(fptr), fileno(stdout));
// 调用函数
int ret = system(command);
// 恢复标准输出流
fflush(stdout);
dup2(original_stdout, fileno(stdout));
rewind(fptr);
// 读取文件内容
char buffer[1024];
while (fgets(buffer, sizeof(buffer), fptr) != NULL) {
printf("%s", buffer);
}
// 关闭文件指针
fclose(fptr);
return ret;
}
int main() {
// 捕获命令输出
capture_function_output("echo 'Hello, World!'");
return 0;
}
```
在上述示例代码中,`capture_function_output` 函数以字符串形式接受一个命令作为参数,并执行该命令。该函数将函数的标准输出重定向到临时文件,并在函数执行完成后,恢复标准输出流并读取临时文件中的内容。
然后我们在 `main` 函数中调用 `capture_function_output` 函数,并将一个简单的 `echo` 命令作为参数传递给它。最后,程序将输出 "Hello, World!"。