2017-06-20 22 views
2

我正在制作Windows应用程序,其purpouse是通知我我的连接停机时间,并将它们记录下来供以后使用/报告。现在我使用批处理脚本实现相同的目标,并将其纳入项目的想法,但当我调查这个问题时,我碰到了多个建议,我应该not ever use system within any of my C++ programs。大多数时候,原因是'它是特定的'和'资源要求'我有想法,但我想知道:为什么它不好,我使用system如果我的意图是要单独制作应用程序对于Windows操作系统,特别是如果它将轻量级程序,将在后台工作为什么'系统'不应该用于Windows特定的应用程序

编辑: 我想这需要澄清,让更多来源:

  • system() in C/C++

    1. 这是一个非常昂贵和资源重函数调用
    2. 这是不可移植:使用system()使程序非常不可移植,即仅适用于在系统级别具有暂停命令的系统,如DOS或W INDOWS。但不是Linux,MAC OSX和其他大多数。
  • I strongly disagree with using the system function (太长,这里引用)

  • Are system() calls evil?

    1. 系统()是不够灵活。 (与我一起)
      1. 它不提供对正在执行的命令的控制。 (对我来说,我只需要脚本的返回值)
      2. 它不是平台独立的。 (现在,这将是一个问题,我真的很喜欢看到一个例子,它在不同的平台上表现不同)
      3. 这是一个安全问题。 (同样,这将是一个问题。有人可以提供一个潜在的安全问题与系统()?一个例子)

其中的一些参数是不相关的我的项目,现在所以我不介意他们在这个特殊情况下,但结合我所读到的所有这些担忧似乎表明,应该不惜一切代价避免使用system()电话。所以我想我应该使用另一种方法(我发现了一堆),但它们都对我来说似乎有点太复杂了至少(即:this,而不是只附加我已经funcioning整个脚本,这是大约一半该长度(25线))

+1

永远不要相信建议告诉你“永远不要做点什么” –

+0

“多种建议”,比如什么?来自哪里?资源?引文?我们邀请哪些人在这里发表评论。 – EJP

+0

你的问题中的链接似乎回答你的问题。 – nefas

回答

2

为什么system认为是不好的做法:

  • 您不必在命令控制(是它在一个壳,一开始...)
  • 有安全问题(走样的问题主要是)
  • 它不是便携式
  • system不允许你这样做先进的错误管理和输入/输出管理(例如,你不能保存命令的输出在一个变量)

,如果你不关心这些问题,你可以使用system。计算机科学中几乎没有绝对的规则(*)。有些事情被认为是不好的做法(如system)可以足够好,只要你知道为什么这种做法很糟糕,并花时间考虑你为什么使用不好的做法(而不是使用良好的做法)。

所以,如果你不关心的参数为什么system不好,使用它,但请记住为什么它是一个不好的做法。

编辑:

(*)的规则一样你不使用系统,或不要使用原始指针 ...这些规则应该遵守,除非你有一个很好的理由不至。

相关问题