Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата
А spawn постоянно говорит, что ему не хватает памяти, как бы я не кочевряжился с его ключами и параметрами, причем опробовал это на несколиких компах результат тот-же.
там еще память необходимо както определять,т.е. количество выделяемое для работы.

Автор: Alex101 21.3.2003, 00:05
Цитата(Step @ 20.3.2003, 20:56)
там еще память необходимо както определять,т.е. количество выделяемое для работы.

Если использовать spawn (под ДОС), то не надо самому ничего выделять.
Возможно, причина кроется в модели памяти твоей программы...

Автор: Chingachguk 21.3.2003, 00:58
Цитата
А spawn постоянно говорит, что ему не хватает памяти, как бы я не кочевряжился с его ключами и параметрами, причем опробовал это на несколиких компах результат тот-же


Запуск внешней программы ничем не отличатеся от запуска основной программы с точки зрения памяти: пусть вначале есть некая память (в досе это, грубо говоря, пространство выше дос и ниже 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, освободить все, кроме одного своего сегмента и пускать проги.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)