У меня есть командный файл, который вызывает исполняемую программу. Программа (скомпилированный код C) генерирует некоторый вывод в stdout. Пакет также выводит некоторую информацию. При запуске летучей мыши я использую перенаправление (>), чтобы получить текст в файл.
mybat.bat содержит:
myprog.exe arg1 %1 arg3
echo Done
затем на консоли:
C:\> mybat arg2 > log.txt
Проблема в том, что в log.txt
я получаю только выходные данные команды echo Done
, а не выходные данные myprog.exe
. Без перенаправления я получаю ожидаемый вывод на экран.
Примечание: под Windows XP
Обновление: это становится еще более странным. При запуске myprog.exe
из командной строки я получаю ожидаемый вывод на консоль. Затем при перенаправлении его вывода на log.txt
файл будет пустым! Печать выполняется с использованием fprintf(stdout, "...")
или fprintf(ofp, "...")
, где назначено ofp
: FILE *ofp = stdout;
.
Дальнейшее исследование: кажется, что строки fprintf(stdout...
перенаправлены, а fprintf(ofp...
нет (да, указатель назначен правильно). Я также обнаружил, что программа в какой-то момент вылетает (при вызове feof()
). Итак, мой вывод заключается в том, что из-за аварийного завершения программы стандартные выходные буферы не были записаны в файл. ОДНАКО - это произошло только для строк, которые используют указатель. Я предполагаю, что эти строки имеют более короткий вывод, поэтому частота сброса ниже (я использовал строку stdout, чтобы напечатать преднамеренное сообщение помощи).
После решения проблемы сбоя данные теперь перенаправляются в файл журнала. Спасибо за вашу помощь.