我试图找出如何从另一个文件捕获函数的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}}?
答案 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 ) ;
}