替代System(),用于在程序中运行批处理文件

Alternative to System() for running a batch file in a program

本文关键字:程序 运行 批处理文件 用于 System 替代      更新时间:2023-10-16

我想制作一个系统,这样我就可以在程序中运行make文件和其他一些与gcc相关的东西,基本上就是在程序中使用gcc和编译东西。如果我把我想做的所有事情都写在一个批处理文件中,那么我需要在程序中运行该批处理文件。

现在每个人都说System()呼叫非常糟糕,因为安全性和其他各种因素。因此,考虑到我使用的是c++,这将是System()运行批处理文件的一个很好的替代方案。如果更可取的话,我想要跨平台的替代方案。

感谢

您可以考虑使用forkexecl系列调用,尽管它们与Unix/Linux有关,并且根据您的使用方式,可以说并不比系统更安全。

我非常怀疑你是否会找到一种通用的、跨平台的方法来做到这一点,哪怕只是因为所有平台都有不同和独特的方法。此外,您尝试运行的脚本在不同的平台上肯定会有所不同,并且可能有不同的指定方式,如目录路径等。

我的建议是,首先问问自己,你将如何回答以下问题——这将是我主要关心的问题:

  • 如何防止意外/故意滥用
  • 我将如何检测我正在运行的脚本中的错误或成功状态
  • 我将如何提供依赖关系?例如,在运行脚本B之前,脚本A必须完全正确地运行
  • 我将如何报告成功和失败的状态

我的最后一个问题是,你为什么要在C++中这样做?有具体原因吗?当然,我是一个C++传播者,尽管我认为用Perl、Python或Bash等脚本语言会更好地解决这个问题,除非你正在着手做一些更激进的事情。