Может ли программа прочитать себя, используя ifstream, без каких-либо искажений или сбоев ???
Вопрос о ifstream в собственном исполняемом файле
Ответы (1)
Читать? Да. вы получаете имя файла как первый член массива argv
в параметрах main
. Убедитесь, что он открыт только для чтения (ios_base::in).
person
littleadv
schedule
13.06.2011
Как это работает? Как он может читать себя и выполнять себя одновременно? (кстати я новичок в программировании)
- person jack excell; 14.06.2011
Программа не запускается прямо с жесткого диска. Проще говоря, он загружается операционной системой с диска в память, а затем выполняется из памяти.
- person Emile Cormier; 14.06.2011
Тогда почему невозможно удалить исполняемый файл во время его работы?
- person jack excell; 14.06.2011
@jack - это возможно в любой разумной операционной системе.
- person Nemo; 14.06.2011
Не могли бы вы дать мне больше информации? Это интересно, хотелось бы узнать больше
- person jack excell; 14.06.2011
@Nemo, @Jack - в некоторых неразумных операционных системах это невозможно, потому что они отображают файл в памяти во время выполнения, чтобы иметь возможность подкачивать его по сегментам. :-)
- person Bo Persson; 14.06.2011
@jack, хотя любознательность может быть хорошей вещью, это мало чему вас научит в программировании, если это ваша цель.
- person ; 14.06.2011
@Bo: Вы, безусловно, можете отключить работающий исполняемый файл (как в rm). Чего вы не можете сделать, так это перезаписать его.
- person Nemo; 14.06.2011
@Nemo Удаление запущенного исполняемого файла на * nix ничего не удаляет. В ОС есть ссылка на файл.
- person ; 14.06.2011
@Nemo - я думал, что неразумным были шлюхи. :-)
- person Bo Persson; 14.06.2011
Да @Нил, я знаю. И если вы собираетесь педантично относиться к удалению или удалению, то вы ошибаетесь; то, что поддерживает ОС, не называется ссылкой.
- person Nemo; 14.06.2011
Так на винде нельзя??
- person jack excell; 14.06.2011
@ Джек - что невозможно? Прочитайте исполняемый файл, который выполняется - да, это возможно. Удалите это? Вы можете столкнуться с нарушениями обмена или зайти в тупик (я не думаю, что Windows делает отложенную отвязку, упомянутую @Nemo).
- person littleadv; 14.06.2011
@littleadv: на самом деле зависит от настроек компилятора / заголовка exe. Вы можете пометить исполняемый файл как запущенный с компакт-диска или из сети, и в этом случае Windows выполнит подкачку вместо того, чтобы держать дескриптор открытым.
- person MSalters; 14.06.2011