【发布时间】:2020-04-03 18:40:05
【问题描述】:
我知道这个问题:Why does system() exist?
但公认的答案是指 C89,一个 30 年的标准,它不会真正帮助我。据我所知,system() 是一个资源密集型安全漏洞,而且不能跨操作系统移植。即使有正当理由使用该功能,我也不相信有什么能阻止我写system("rm -rf /*")。一般来说,删除几乎所有内容的 1 行可能不是一个很好的语言功能。 This 文章宣称它是邪恶的,原因有很多。
在上面链接的问题中,一条评论指出系统“是执行系统特定内容的唯一可移植方式”。这对我来说没有意义,我用系统为某些 Linux 发行版编写的代码在 Windows 机器上不起作用。似乎“便携式系统特定”也是矛盾的。难道没有像windows.h这样的与机器对话的API吗?
那么系统是否有继续存在的正当理由,是否存在遗留应用程序,或者 C++ 只是没有解决它?
【问题讨论】:
-
让
system执行任意命令不同于让它执行任意用户命令。你可以在你的程序中使用#ifdef或任何基于 windows vs linux 等的字符串文字。 -
“便携”如POSIX?
-
您还可以使用 c++ 文件系统库删除文件,这甚至是一种删除文件的可移植方式。或者您可以只调用特定于操作系统的函数。删除
system()不会阻止任何人编写有害代码。可能是为了向后兼容而保留的?因为有些程序实际上以一种很好的方式使用它。 -
你会说
fstream不可移植,因为当我传递一个文件名时,我需要一个系统上的目录和另一个系统上的/之间的\?看到类比了吗? -
顺便说一句,如果有人声称某事是“邪恶的”,我会小心的。夸大往往是没有好的论据的标志(并非总是如此,但经常如此)。您链接的文章主要描述了滥用
system的坏处。我的意思是system("PAUSE")和system("CLS").... 来吧,这当然是“邪恶的”。除此之外,该文章还提到了手册,其中提到了您必须注意的事项以及“它的真正作用”,然后将其称为“邪恶”。这是糟糕的风格恕我直言。锤子并不邪恶,因为你可以用它敲打你的手指。
标签: c++