How to capture output of printf?

后端 未结 4 1836
不思量自难忘°
不思量自难忘° 2020-12-29 14:49

I am calling a function funcB from funcA. funcB uses several printf statements to output data. Is there a way for me to c

4条回答
  •  情歌与酒
    2020-12-29 15:09

    (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.

提交回复
热议问题