程序调用其他程序

时间:2010-04-08 16:51:24

标签: c++ command-line command-line-arguments

我正在编写一个解决一种min的程序。生成树问题。我有两个不同的算法,我已经在两个单独的.cpp文件中工作,我命名为kruskels.cpp和prims.cpp。

我的问题是:

每个文件都使用以下命令行来运行它。时间./FILENAME INPUTFILE FACTOR

我想创建一个程序,根据输入的输入文件,将运行kruskels.cpp或prims.cpp。我怎样才能做到这一点?

此程序必须将这些命令行参数传递给kruskels或prims。每个文件(kruskels.cpp和prims.cpp)都设计为使用那些命令行arugments运行(因此它们将INPUTFILE和FACTOR作为变量来处理文件io)。

这应该是针对c ++。

3 个答案:

答案 0 :(得分:6)

您可以使用system功能调用外部程序。

然而,最好以模块化方式构建Kruskal和Prim求解器作为类,并根据输入从main实例化相应的类。为此,您可以将kruskels.cpp,prims.cpp和main.cpp链接到一个可执行文件中。

答案 1 :(得分:2)

标准方法是使用system()。您可能还想查找popen()(或在Windows上,_popen())。

编辑:我的假设是你有两个可执行文件和(关键点)想要将它们作为单独的可执行文件保存。在这种情况下,使用系统非常简单。例如,您可以执行以下操作:

std::stringstream buffer;

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

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

根据您正在做的事情(以及Eli所指出的),您可能希望创建一个可执行文件,而在该一个可执行文件中实现Prim和Kruskal的方法。如果没有看到你的代码,就不可能猜出这将会有多少工作。

答案 2 :(得分:0)

如果在执行两个子程序之一后需要顶级程序重新获得控制权,请使用system()或popen(),如果不需要,则可以使用execve()