内部捕获/重定向标准输出?

Map*_*ker 5 c unix printf stdout

这似乎有点像计算系统101的问题,但我很难过.

我正在将C/C++项目A中的现有代码集成到我自己的项目B中.A和B都将链接到一个可执行的线程进程中.项目A的代码广泛使用printf进行输出.这很好,但我也希望将输出捕获到我自己的缓冲区中.一旦printf调用写入,我有没有办法从stdout读取?我不能分叉过程或管道.我对poll()stdout或者dup()的努力没有成功(我可能在这里做错了).

Pau*_*bel 4

您可以使用freopen来更改描述符。

#include<stdio.h>

main(int argc, char** argv) {
    FILE *fp = freopen("output.txt", "w", stdout);
    printf("Hello\n");
    fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)

如果运行它,您将在 output.txt 中看到 printf 输出,并且屏幕上不会出现任何内容。

现在,您可以打开文件来读取数据,甚至可以将其映射 到内存空间并以这种方式进行处理。