c++ - 为什么 system() 仍然存在?

标签 c++

我知道这个问题:Why does system() exist? 但接受的答案是指 C89,这是一个已有 30 年历史的标准,这对我来说并没有真正的帮助。据我所知,system() 是一个资源密集型安全缺陷,而且无法跨操作系统移植。即使该功能有合理的理由,我也不认为有什么可以阻止我编写 system("rm -rf/*")。一般来说,删除几乎所有内容的 1 行可能不是一个很好的语言功能。 This文章宣称它是邪恶的,原因有很多。

在上面链接的问题中,评论指出系统“是执行特定于系统的操作的唯一可移植方式”。这对我来说没有意义,我用某些 Linux 发行版的系统编写的代码无法在 Windows 机器上运行。 “特定于可移植系统”似乎也是一个矛盾的说法。难道没有像 windows.h 这样与机器对话的 API 吗?

那么,系统继续存在是否有合理的理由,是否存在遗留应用程序,或者 C++ 只是没有抽出时间来取消它?

最佳答案

如果删除system(),您会获得什么安全性?您可以使用 fork()exec() 实现同样的效果,这就是 system() 内部所做的全部事情。

您在计算机上运行的任何程序都必须信任沙箱。在沙盒环境中,首先要做的事情之一是有效的 system() 调用,但其他事情也必然会被禁用。

运行外部程序是一项无法删除的重要功能。

请记住,C++ 的定义原则之一是,该语言永远不会认为自己比程序员更聪明,也不会阻止程序员做任何他们想做的事情,而不管后果如何。

没有理由删除它,因为您始终可以使用其他工具来实现它。

关于c++ - 为什么 system() 仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61018431/

相关文章:

C++二进制 '+';找不到类型为 'Pair' 的全局运算符

c++ - 如何在 C++ 中终止进程,只知道其名称的一部分

C++ 为要检查的模板化数组提供任意参数?

c++ - 如何判断两个 LARGE unordered_map 是否相等?

c++ - 包含 unique_ptr 的 unordered_map 的对象的深拷贝

C++:字符串索引和保留标点符号的问题

c# - 是否有任何 C# 或 C++ 框架可以帮助录制桌面应用程序的视频?

android - 在NDK w/gradle上编译两个项目,其中一个依赖另一个的binary

c++ - 使用额外模块错误 ocv_download 构建 opencv

c++ - 为什么移动一个值比它的大小更远不会导致 0?