Как диагностировал Джейсон, вам нужно fflush()
поток (stdout
), прежде чем закрыть базовый файл (с помощью вызова _dup2()
).
Другая проблема заключается в том, что нет проверки ошибокв коде;Вы не знаете, какие из ваших вызовов функций, если таковые вообще имеются, терпят неудачу.По крайней мере, при решении этой проблемы вам необходимо отслеживать как freopen()
, так и _dup2()
, чтобы убедиться, что они работают.
Не ясно, что в Windows вы можете добраться до задней части библиотеки <stdio.h>
и измените дескриптор файла.В Unix, я думаю, это будет работать - не обязательно поддерживается, но, вероятно, это будет работать.Но я легко могу представить себе, как это не работает в Windows (не будучи уверенным, что мое воображение не просто оживляет).
В конечном счете, я не уверен, что есть портативный способ восстановить stdout
обратно в исходное состояние.вывод после использования freopen()
на нем.