【问题标题】:Calling a different program and passing it arguments调用不同的程序并传递参数
【发布时间】:2012-06-11 21:07:51
【问题描述】:

我创建了一个随机整数生成器程序。它接受两个参数,一个最大数和一个最小数,并在该范围内输出一个随机整数,包括两端。

我正在创建需要随机整数的模拟程序,并且我希望能够调用随机程序并将模拟程序所需的最大值和最小值传递给它,然后将随机数返回给模拟。

我只是不知道也找不到我需要在模拟中编写以调出随机发生器并将最大值和最小值传递给它的代码。

谢谢!

【问题讨论】:

  • 这是一个函数或类(取决于情况)的用途,而不是在其他程序中调用的整个程序。
  • 至少能写出方法签名吗?
  • 您可以使用 fork 在 *nix 上生成子进程 ...
  • std::stringstream ss; ss << filename << ".exe " << min << " " << max; system(ss.str().c_str());

标签: c++ ubuntu arguments


【解决方案1】:

最好的方法是从您的随机生成器创建一个库并链接到它。否则,您可以查找execv() function

【讨论】:

    【解决方案2】:

    对于您的具体问题,您应该考虑使用popen()。请务必在阅读完结果后致电pclose()

    FILE *input = popen("program -and args", "r");
    if (input) {
      // read the input
      pclose(input);
    } else {
      perror("popen");
      // handle error
    }
    

    如果程序从标准输入读取参数,然后将结果输出到标准输出,则需要创建popen 的双向版本。假设您有一个 POSIX 兼容的操作系统,socketpair 可用于创建您的双向通道(或者,您可以对 pipe 进行两次调用)。然后,您将使用forkexec 变体之一来实现该功能。这是讨论here

    但是,正如其他人所建议的那样,您实际上应该将随机数生成器的功能作为函数合并到您的程序中。

    【讨论】:

      猜你喜欢
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2015-07-08
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多