C++:跨平台且安全的 system(...) 替代方案是什么?

标签 c++ linux cross-platform system executable

我想在 C++ 中使用 system(...) 来执行另一个可执行文件。经过一番研究,似乎每个人都认为 system(...) 是有史以来最糟糕的事情,除非绝对必要,否则没有人应该使用它,因为它是

  • 资源消耗大
  • 不保证适用于所有平台
  • 防病毒软件通常认为它是恶意的
  • 很容易被利用/可能会无意中启动错误的程序

那么,我应该使用 system(...) 的替代方案吗?我使用的是 Linux,但我希望它是跨平台的(至少在 Linux 和 Windows 之间)。

最佳答案

如果您的目标只是同步执行子进程,那么 system 确实是一个不错的选择。它是在C89中定义的,因此它具有很高的可移植性,除非需要运行大量子进程,否则性能不一定是问题。

是的,您必须注意安全问题:您应该清除环境变量,并始终确保使用完整路径(如果可能)执行该进程,以避免 PATH 攻击。另外,在构建没有正确转义的 system 命令时,切勿使用外部输入。

如果您小心使用它,它是运行外部程序的一种很好的、​​可移植的方式。

关于C++:跨平台且安全的 system(...) 替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255932/

相关文章:

C++图像编码/解码库

c++ - zeromq 轮询器结合了多个请求套接字和发布

qt - 如何根据当前键盘布局从 QKeyEvent 捕获 QKeySequence?

c++ - 是否有用于在应用程序之间共享数据的 C\C++ 跨平台库?

python - 我应该使用 PyQT4 在 Python 中编写跨平台软件吗?

c++ - 与/bigobj 链接时间过长

c++ - Direct2D、Directx11on12 示例 VSYNC 问题

Linux/glibc。我可以在信号处理程序中使用 fprintf 吗?

linux - 如何在另一个进程结束后立即运行 python 脚本

linux - ELF标签地址