【问题标题】:Using program as library that contains main function将程序用作包含主要功能的库
【发布时间】:2010-09-24 14:36:46
【问题描述】:

我打算编写一个调用 cdrecord 的程序。 (我是一个初学者,一个试图“抓痒”的初学者)该程序将用 C++ 编写。我已经确定我需要能够运行 cdrecord 才能使其正常工作。

cdrecord 是用 C 语言编写的。但是使用它的文档来自命令行。源代码包含一个为命令行应用程序提供动力的 main 函数,这与我使用 cdrecord 执行的代码相同。

我想知道我是否应该:

  1. 将 main 更改为另一个名称,然后包含源文件并在需要时调用它。
  2. 使用 system() 命令调用编译后的程序。
  3. 别的东西。

【问题讨论】:

    标签: c++ call


    【解决方案1】:

    system() 通常是一个不错的方法,只是注意不要将任意不受信任的值注入到您执行的字符串中。例如,如果您有一个 web 前端,其中 padsize 选项默认为 0,并且有人输入的不是数字而是“0; rm -rf *;”,请确保您最终不会调用“cdrecord padsize=0; rm -rf *; ...”。

    系统的另一件事是启动第二个不同的进程可能会更慢 - 如果您运行该程序数百次并且每次它只有几毫秒的工作要做,这可能很重要,但在您的情况下,启动的开销与可能的 cdrecord 运行时相形见绌。

    【讨论】:

      【解决方案2】:

      使用 system() 可以让您不必担心 cdrecord 的代码。就个人而言,如果我有一些非常紧迫的问题需要我包含它,我只会将代码包含在我自己的程序中。我认为 system() 是要走的路。

      http://www.cplusplus.com/reference/clibrary/cstdlib/system/

      1) 您是否有任何特殊原因宁愿将它包含在自己的代码中,而不是直接使用它?

      2) 您是否有权更改代码并将其包含在您自己的程序中?

      【讨论】:

      • 谢谢。我主要担心系统会创建糟糕的代码。
      • 不。在这种情况下,我会选择system()
      猜你喜欢
      • 2017-02-24
      • 2014-08-17
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2018-03-20
      相关资源
      最近更新 更多