gpt4 book ai didi

c++ - 如何捕获 printf 的输出?

转载 作者:可可西里 更新时间:2023-11-01 18:19:04 39 4
gpt4 key购买 nike

我正在从 funcA 调用函数 funcBfuncB 使用多个printf 语句输出数据。我有办法通过 funcA 捕获该数据吗?我无法修改 funcB

funcB(){
printf( "%s", "My Name is" );
printf( "%s", "I like ice cream" );
}

funcA(){
funcB();
}

最佳答案

(此答案是基于 this answer 的更正版本。)

这个答案是以 POSIX 为中心的。使用 open 为要重定向到的文件创建文件描述符。然后,使用 dup2STDOUT_FILENOstdout 改为写入文件。但是,您需要在执行此操作之前dup STDOUT_FILENO,这样您就可以使用另一个dup2 恢复stdout >.

fflush(stdout);
int stdout_fd = dup(STDOUT_FILENO);
int redir_fd = open(redirected_filename, O_WRONLY);
dup2(redir_fd, STDOUT_FILENO);
close(redir_fd);
funcB();
fflush(stdout);
dup2(stdout_fd, STDOUT_FILENO);
close(stdout_fd);

如果 funcB 使用 std::cout,使用 std::cout.flush() 而不是 fflush(stdout )

如果想更直接地操作C++流,可以使用Johnathan Wakely's answer .

关于c++ - 如何捕获 printf 的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11110300/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com