(This answer is a corrected version based on this answer.)
This answer is POSIX centric. Use open
to create a file descriptor for the file you want to redirect to. Then, use dup2
to STDOUT_FILENO
to change stdout
to write to the file instead. But, you'll want to dup
the STDOUT_FILENO
before you do that, so you can restore stdout
with another dup2
.
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);
If funcB
is using std::cout
, use std::cout.flush()
instead of fflush(stdout)
.
If you want to manipulate C++ streams more directly, you can use Johnathan Wakely's answer.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…