捕获从 C 中的另一个文件调用的函数的标准输出

标签 c linux

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

即文件: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/

相关文章:

c - 表达式 : addition of two value of type unsigned char 的确切类型是什么

linux - 编辑/etc/hosts 文件 OS X

linux - 进程被信号 6 终止,核心在 libc 中显示了一种循环

c# - .Net 核心 API 在 linux 机器上的监控

c++ - 画线算法

c - 如何实现终端滚动

regex - 删除所有包含数字的目录,除了最近使用 Regex 在 Red Hat Linux Server 中创建的目录之外

linux - 在 Windows 机器中从 powershell 执行 shell 脚本

c - 为什么 clock_gettime 是异步信号安全的

将具有动态数组的结构转换为双指针