[ASM] Возможно ли заставить конслольную прогу перенаправлять вывод в файл?08.03.04 15:53 Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 17.03.04 21:32 Количество правок: 1
Если получать хендл консли через GetStdHandle(STD_OUTPUT_HANDLE), а выводить в конслоль через WriteConsole, то в случае стандартного перенаправления вывода в файл информация не появиться ни в файле, ни на экране.
Если получать хендл консоли через CreateFile("CONOUT$", ...), а в выводить в консоль через WriteFile(...), то вывод всегда будет идти только на экран даже при перенаправлении в файл. Файл при этом будет пустой
А вот если получать хендл консоли через GetStdHandle(STD_OUTPUT_HANDLE), а выводить в конслоль через WriteFile, то получаем необходимый результат.
С точки зрения порядка реализации HandleX был абсолютно прав, но таблицу импорта не патчил - поправил исходник.
Thanx всем откликнувшимся!
Кстати винда любит кэшировать такой вывод. Кэширование...09.03.04 15:56 Автор: Killer{R} <Dmitry> Статус: Elderman
Кстати винда любит кэшировать такой вывод. Кэширование выражается в том что реально запись в файл происходит весьма редко - не то по достижении некоего порогового количества данных не то через определенный интервал времени, но скорее всего и то и другое. А до этого данные висят хз где. Причем если прервать выполнение проги по Ctrl+C нифига из кэша в файл не падает. Те ни в консоль ни в файл ниче не пишется.
Предлагаешь?:09.03.04 16:13 Автор: Den <Денис Т.> Статус: The Elderman
придется юзать WriteFile как уже предлагали тут. Потому что в мсдн написано
WriteConsole fails if used with a standard handle that has been redirected to be something other than a console handle.
Ясно. Мысль понята. Спасибо!09.03.04 17:11 Автор: Den <Денис Т.> Статус: The Elderman
Во мля... Просто у меня в голове не уложилось, что у человека есть исходник, а он мозги людям компОзит ;-)10.03.04 10:28 Автор: HandleX <Александр М.> Статус: The Elderman
Вообще при корректном выходе из проги без Ctrl+C все в файл сохраняется.09.03.04 16:28 Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 09.03.04 16:30 Количество правок: 1
> Конслольная программа для вывода на экран использует > функцию Win32API WriteConsole и открывает только хэндл > STD_OUTPUT_HANDLE. > > При выполнении из командной строки > myprog.exe > myprog.txt > файл myprog.txt создается, но пустой.
А вывод на экран происходит?
Подробнее:)09.03.04 16:09 Автор: Den <Денис Т.> Статус: The Elderman
close (1);
int fd = open ("you_file_name", O_CREAT | O_RDONLY);
Первое, что приходит в голову — пропатчить таблицу импорта WriteConsole на WriteFile, по параметрам они совпадают...09.03.04 07:02 Автор: HandleX <Александр М.> Статус: The Elderman
Прога должна выводить на экран, но если я запускаю ее из командной строки: myprog.exe > myprog.txt
то должно срабатывать перенаправление стандартного вывода системой в файл myprog.txt, например как это происходит с командой ping:
ping -? > c:\ping.txt