Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
А так: 09.03.04 15:30 Число просмотров: 827
Автор: lunc <Alexander Krizhanovsky> Статус: Member Отредактировано 09.03.04 15:32 Количество правок: 1
|
А так:
close (1);
int fd = open ("you_file_name", O_CREAT | O_RDONLY);
|
<programming>
|
[ASM] Возможно ли заставить конслольную прогу перенаправлять вывод в файл? 08.03.04 15:53
Автор: Den <Denis> Статус: The Elderman Отредактировано 17.03.04 21:32 Количество правок: 1
|
Конслольная программа для вывода на экран использует функцию Win32API WriteConsole и открывает только хэндл STD_OUTPUT_HANDLE.
При выполнении из командной строки
myprog.exe > myprog.txt
файл myprog.txt создается, но пустой.
Как побороть, кто знает?
|
|
[ASM] У меня получилось!!! 17.03.04 21:31
Автор: Den <Denis> Статус: The Elderman
|
Если получать хендл консли через 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 <Denis> Статус: The Elderman
|
Попробовать используя CreateFile("CONOUT$"...) выводить на консоль через хендлы файлов и сделать flush?
|
| | |
Хм. похоже через WriteConsole вообще так не сделашь 09.03.04 17:07
Автор: Killer{R} <Dmitry> Статус: 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 <Denis> Статус: The Elderman
|
Но закрывать обсуждение не буду пока не решу проблему.
|
| | | | |
Дык вот я и говорю — пропач импорт! 10 байт меняешь и вуаля! ;-) 09.03.04 19:25
Автор: HandleX <Александр М.> Статус: The Elderman
|
|
| | | | | |
Если есть исходник зачем патчить таблицу импорта? ;) 09.03.04 19:37
Автор: Den <Denis> Статус: 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
|
Насчет выхода по ExitProcess не знаю. Вообще самый корректный выход - выход из main.
|
|
Подробнее? 09.03.04 15:48
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
|
> Конслольная программа для вывода на экран использует > функцию Win32API WriteConsole и открывает только хэндл > STD_OUTPUT_HANDLE. > > При выполнении из командной строки > myprog.exe > myprog.txt > файл myprog.txt создается, но пустой.
А вывод на экран происходит?
|
| |
Подробнее:) 09.03.04 16:09
Автор: Den <Denis> Статус: The Elderman
|
> А вывод на экран происходит? Нет.
|
|
А так: 09.03.04 15:30
Автор: lunc <Alexander Krizhanovsky> Статус: Member Отредактировано 09.03.04 15:32 Количество правок: 1
|
А так:
close (1);
int fd = open ("you_file_name", O_CREAT | O_RDONLY);
|
|
Первое, что приходит в голову — пропатчить таблицу импорта WriteConsole на WriteFile, по параметрам они совпадают... 09.03.04 07:02
Автор: HandleX <Александр М.> Статус: The Elderman
|
|
| |
Не то. 09.03.04 15:26
Автор: Den <Denis> Статус: The Elderman
|
Прога должна выводить на экран, но если я запускаю ее из командной строки: myprog.exe > myprog.txt
то должно срабатывать перенаправление стандартного вывода системой в файл myprog.txt, например как это происходит с командой ping:
ping -? > c:\ping.txt
|
|
|