捕获从C中的另一个文件调用的函数的stdout

时间:2016-02-19 15:56:51

标签: c linux

我试图找出如何从另一个文件捕获函数的stdout并将其stdout捕获到当前文件中的缓冲区。

即。档案:B

printfInfo() 
{
    ....
    printf("Information: description\n"); 
    printf("Date: date\n");
    ....
    return OK;
}

并在文件中:A

funcA() 
{
    ....
    result = printInfo(); //capture stdout of the function here

}

到目前为止,我尝试了dup和dup2但是无法将stdout重定向到缓冲区。是否有其他方法可以在不使用管道或文件系统的情况下捕获printInfo()的{​​{1}}?

1 个答案:

答案 0 :(得分:0)

您可以在调用funcB()之前使用freopen()将stdout重定向到文件,然后在返回后读取该文件的输出。如果您需要在之后恢复标准输出,那么可以使用dup()dup2()完成,如下所示:

void funcA() 
{
    int stdout_restore = dup(STDOUT_FILENO);
    FILE* redirected = freopen ("stdoutcapture.txt","w",stdout);
    res = funcB(); 
    fclose( redirected ) ; 
    dup2( stdout_restore, STDOUT_FILENO ) ;
}