我想在 C++ 中使用 system(...)
来执行另一个可执行文件。经过一番研究,似乎每个人都认为 system(...)
是有史以来最糟糕的事情,除非绝对必要,否则没有人应该使用它,因为它是
- 资源消耗大
- 不保证适用于所有平台
- 防病毒软件通常认为它是恶意的
- 很容易被利用/可能会无意中启动错误的程序
那么,我应该使用 system(...)
的替代方案吗?我使用的是 Linux,但我希望它是跨平台的(至少在 Linux 和 Windows 之间)。
最佳答案
如果您的目标只是同步执行子进程,那么 system
确实是一个不错的选择。它是在C89中定义的,因此它具有很高的可移植性,除非需要运行大量子进程,否则性能不一定是问题。
是的,您必须注意安全问题:您应该清除环境变量,并始终确保使用完整路径(如果可能)执行该进程,以避免 PATH 攻击。另外,在构建没有正确转义的 system
命令时,切勿使用外部输入。
如果您小心使用它,它是运行外部程序的一种很好的、可移植的方式。
关于C++:跨平台且安全的 system(...) 替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255932/