Вопрос о ifstream в собственном исполняемом файле

Может ли программа прочитать себя, используя ifstream, без каких-либо искажений или сбоев ???


person jack excell    schedule 13.06.2011    source источник


Ответы (1)


Читать? Да. вы получаете имя файла как первый член массива argv в параметрах main. Убедитесь, что он открыт только для чтения (ios_base::in).

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