| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Запуск фаилов из Borland C++(dos) |
| Автор: Alexk 20.3.2003, 21:40 |
| Мне необходимо из под доса зпустить фаил, но так чтобы он после своего завершения вернул возжи тому процессу который его вызвал! Да я знаю есть функции spawn.. exec.. Он exec не возращает управление.... А spawn постоянно говорит, что ему не хватает памяти, как бы я не кочевряжился с его ключами и параметрами, причем опробовал это на несколиких компах результат тот-же. Подскажите, что делать... |
| Автор: pish_r 20.3.2003, 22:09 |
| попробуй system() |
| Автор: Step 20.3.2003, 23:25 |
| модуль систем а не функция |
| Автор: Step 20.3.2003, 23:56 | ||
|
| Автор: Alex101 21.3.2003, 00:05 | ||
Если использовать spawn (под ДОС), то не надо самому ничего выделять. Возможно, причина кроется в модели памяти твоей программы... |
| Автор: Chingachguk 21.3.2003, 00:58 | ||
Запуск внешней программы ничем не отличатеся от запуска основной программы с точки зрения памяти: пусть вначале есть некая память (в досе это, грубо говоря, пространство выше дос и ниже 640K/нажми mem /d /p): DOS (command.com, etc) --------------------------- drivers (like keyrus.com) --------------------------- Memory for user programs (free) --------------------------- Video, etc Если ты запускаешь прогу на выполнение, то она занимает определенное место в Memory for user programs: DOS (command.com, etc) --------------------------- drivers (like keyrus.com) --------------------------- Memory for user programs 1. Parent program (first process) <rest of memory> --------------------------- Video, etc Первая программа (Parent program) может точно так же пускать в оставшейся памяти (rest of memory) cледующую программу, если только размер ее больше или равен, чем нужно для запуска этой следующей программы (Child program): DOS (command.com, etc) --------------------------- drivers (like keyrus.com) --------------------------- Memory for user programs 1. Parent program (first process) 2. Child program (second process) <rest of memory'> --------------------------- Video, etc После запуска Child'а Parent пассивно висит и ожидает, пока Child корректно вернется в дос, а тот ужо вернет все ей. Стало быть, ясно, штаа для запуска другой проги нужно дать ей память. Почему же может быть так, что небольшой экзешник сел в память (Parent), но ничего пускать из-под себя не может ? Ведь пусть он будет 40 кил, это меньше, чем всего свободной (обычно около 500 кил). Фича в том, что при старте проги дос смотрит на хидер проги (если это экзе) и выдает основной проге места много больше, чем она занимает на винте: это и место под стек (до 64 кил), а самое главное - в зависимости от какого-то там битика в хидере дос вообще выдает всю свободную память программе (это происходит всегда для COM-программ). Насколько я помню, некоторые сишные компиллеры стараются сделать занимаемую память программой по минимуму, некоторые - нет (посмотреть опции ?). Самый простой способ - это сделать com, освободить все, кроме одного своего сегмента и пускать проги. |