我在读著名的the command(1988)时遇到C Language Book。该命令今天常用吗?
摘自本书(第7.8.4节):
函数 system(char * s)执行包含在 字符串s,然后继续执行当前程序。的 s的内容在很大程度上取决于本地操作系统。作为一个 一个简单的示例,在UNIX系统上,该语句
系统(“日期”);
使程序 date 运行...
给我的印象是,fork-and-exec是从当前程序运行另一个程序的主要方式...
答案 0 :(得分:2)
system
它标准C库中的功能,该功能允许C程序调用外部(表示操作系统级别)命令。
(几乎)所有内容都在上面的句子中:该函数是标准C,意味着任何兼容的实现都支持该函数。但是操作系统的作用是错误的...仅依赖于操作系统。
它应该是编写可移植程序的首选方法(因为它是标准C),但不幸的是:
后一部分与安全性相关:许多操作系统(至少我所知道的所有操作系统)都具有可配置的 path ,可在其中搜索命令,在这种情况下,system
函数会使用那条路。问题是,如果有人设法在他们控制的位置安装了具有相同名称的其他命令,则程序可以通过更改路径来实际调用不是程序员想要的命令。路径。
这就是为什么system
普遍不被接受,并且谨慎的程序员仅依赖于较低级别的系统相关函数(如Unix上的fork + exec或Windows上的CreateProcess)或对调用的命令使用绝对路径的原因, system
。但是然后,您需要一种相当复杂的配置方法,以使该绝对路径适应各种系统...