我试图找出如何从另一个文件捕获函数的标准输出并将其标准输出捕获到当前文件中的缓冲区。
即文件:B
printfInfo()
{
....
printf("Information: description\n");
printf("Date: date\n");
....
return OK;
}
在文件中:A
funcA()
{
....
result = printInfo(); //capture stdout of the function here
}
到目前为止,我尝试了 dup 和 dup2
但无法将标准输出重定向到缓冲区。是否有另一种方法可以在不使用管道或文件系统的情况下捕获 printInfo()
的 stdout
?
最佳答案
您可以使用 freopen()
将标准输出重定向到一个文件, 在调用 funcB()
之前,然后在它返回后读取该文件的输出。如果之后需要恢复标准输出,则可以使用 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 ) ;
}
关于捕获从 C 中的另一个文件调用的函数的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35509466/