我知道这个问题: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/