Программа для вызова других программ - PullRequest
1 голос
/ 08 апреля 2010

Я пишу программу, которая будет решать тип мин.проблема связующего дерева.у меня есть 2 разных алгоритма, которые я начал работать в двух отдельных файлах .cpp, которые я назвал kruskels.cpp и prims.cpp.

у меня такой вопрос:

каждый файл использует следующую командную строку для его запуска.time ./FILENAME INPUTFILE FACTOR

Я хотел бы создать программу, которая, в зависимости от того, какой входной файл введен, будет запускать либо kruskels.cpp, либо prims.cpp.Как я могу это сделать?

эта программа должна передавать эти аргументы командной строки в kruskels или примы.каждый файл (kruskels.cpp и prims.cpp) предназначен для запуска с использованием этих параметров командной строки (поэтому они принимают INPUTFILE и FACTOR в качестве переменных для выполнения файла io).

это должно быть для c ++.

Ответы [ 3 ]

6 голосов
/ 08 апреля 2010

Вы можете вызывать внешние программы, используя функцию system.

Однако , было бы намного лучше построить ваши решатели Kruskal и Prim модульным способом как классы и создать экземпляр соответствующего класса из вашего main, в соответствии с вводом. Для этого вы свяжете kruskels.cpp, prims.cpp и ваш main.cpp в один исполняемый файл.

2 голосов
/ 08 апреля 2010

Стандартный способ - использовать system(). Вы также можете поискать popen() (или в Windows _popen()).

Edit: я предполагал, что у вас есть два исполняемых файла и (критическая точка) хотите сохранить их как отдельные исполняемые файлы. В этом случае использование системы довольно просто. Например, вы можете сделать что-то вроде:

std::stringstream buffer;

if (use_Kruskals)
   buffer << "Kruskals " << argv[1] << argv[2];
else
   buffer << "Prims " << argv[1] << argv[2];

system(buffer.str().c_str());

В зависимости от того, что вы делаете (и, как указал Эли), вы можете захотеть создать один исполняемый файл, в котором вместо ваших реализаций методов Прима и Крускала будет использоваться один исполняемый файл. Не видя ваш код для них, невозможно угадать, сколько это будет стоить.

0 голосов
/ 08 апреля 2010

Если вам нужна ваша лучшая программа для восстановления контроля после выполнения одной из двух ваших дочерних программ, используйте system () или popen (), если вам это не нужно, вы можете использовать execve ()

...