Никогда не используйте freopen
.Он не может достичь того, чего вы хотите, и это очень опасная функция.В случае сбоя единственная безопасная вещь, которую вы можете сделать, - это немедленно прекратить работу программы или убедиться, что к stdout
никогда больше не будет обращаться.dup2
.Это выглядит примерно так:
fflush(stdout);
int old_stdout = dup(1);
int new_stdout = open("whatever", O_WRDONLY|O_CREAT, 0666);
dup2(new_stdout, 1);
close(new_stdout);
/* use new stdout here */
fflush(stdout);
dup2(old_stdout, 1);
close(old_stdout);