Запустить программу в программе

Итак, мне интересно, есть ли способ запустить программу на c, а когда она завершится, вызвать и запустить вторую программу сразу после этого.

По сути, это текстовое приключение, и я бы хотел, чтобы оно выполнялось сегментами, отчасти для того, чтобы код не стал огромным из-за тонны if-операторов и всего такого, а отчасти для того, чтобы я мог как система фальшивых контрольно-пропускных пунктов, чтобы вы могли продолжить с того места, на котором остановились.

Это или способ как-то сохранить свой прогресс. Я не мог ничего придумать, как именно это сделать, но я знаю, что это возможно. Я просто еще не знаю, что я делаю. Простите меня, если приведенные выше вопросы действительно просты.


person hego64    schedule 30.01.2017    source источник
comment
Это не простые вопросы; однако это очень широкие вопросы. Вы кодировали какие-либо из ваших приключений? Как вы собираетесь поддерживать согласованность между сегментами? Предположительно, когда вы переходите от одного сегмента к другому, игроки не теряют свои очки или найденные товары и т. д. Поэтому вам нужно знать, как вы собираетесь передавать эти данные между сегментами. База данных? Файл? Любой может работать. Будете ли вы иметь дело только с одним пользователем одновременно или их может быть несколько? В средах POSIX вы можете использовать одну из функций семейства exec*() для выполнения новой программы.   -  person Jonathan Leffler    schedule 31.01.2017
comment
Один пользователь за раз, и я подумал, что если я собираюсь использовать несколько сегментов, то я просто буду использовать файл для сохранения данных игрока вместо массива, который я, вероятно, использовал бы, если бы придерживался одного гигантского файла. .   -  person hego64    schedule 31.01.2017
comment
Как вы собираетесь решать, какой сегмент запустить, когда ваш пользователь перезапустит игру?   -  person Jonathan Leffler    schedule 31.01.2017
comment
Я думал о какой-то мегаманевренной системе, где вы получаете пароль на «контрольных точках», так что, скажем, после каждых одного или двух сегментов вы получаете пароль, который вы можете ввести в основной отправной точке, чтобы перейти к началу сегмент, на котором вы остановились. Я предполагаю, что это осуществимо.   -  person hego64    schedule 31.01.2017
comment
Должен ли я использовать exec или систему? Какая разница?   -  person hego64    schedule 31.01.2017
comment
Разница в том, что exec*() заменяет текущий процесс новой программой — запускается другая программа (или перезапускается та же программа), тогда как system() временно приостанавливает текущую программу, пока выполняется другая, и возобновляется только после завершения второй. За кулисами system() обычно реализуется в системах POSIX, а fork() и exec*() выполняют тяжелую работу.   -  person Jonathan Leffler    schedule 31.01.2017


Ответы (1)


Вы можете использовать вызовы system в C для выполнения других программ.

См.: Как выполнить внешняя программа в коде C в Linux с аргументами?

Однако я бы не рекомендовал это из соображений безопасности. Вместо этого, я думаю, вам следует написать несколько текстовых файлов с информацией об уровнях, содержащейся внутри. Затем напишите общую программу, которая перемещается по этим файлам в зависимости от ввода пользователя.

person Nick    schedule 30.01.2017