【问题标题】:Program to call other programs程序调用其他程序
【发布时间】:2010-04-08 16:51:24
【问题描述】:

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

我的问题是这样的:

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

我想制作一个程序,根据输入的输入文件,它可以运行 kruskels.cpp 或 prims.cpp。我怎样才能做到这一点?

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

这应该适用于 c++。

【问题讨论】:

  • 这里要明确一点...您实际上并没有运行 .cpp 文件,对吧?您正在运行已编译的可执行文件?
  • 正确。程序将已经编译。然后使用命令行参数执行每个 .cpp。

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


【解决方案1】:

您可以使用system 函数调用外部程序。

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

【讨论】:

    【解决方案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 方法的实现放在该可执行文件中。如果没有看到您为他们编写的代码,则无法猜测这需要多少工作。

    【讨论】:

    • 原谅我。我从未听说过系统()。您能否提供一个链接,以很好地描述如何使用它或解释一下?我要写一个单独的程序吗?那我该如何传递命令行参数呢?
    • system() 确实是您执行此操作的方式,但请查看 Eli 的响应。你可能不想这样做。创建两个函数并有条件地调用其中一个。
    • 每个 .cpp 使用相同的结构名称和一些相同的函数名称,因此我可以在两者之间保持相似。我应该重命名它们然后将两个程序合并在一起吗?
    • @Evil:这就是命名空间的用途。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      相关资源
      最近更新 更多