我正在编写一个使用exec的通用库函数,我想知道它有什么区别
它是通过使用类似的东西来做的
execl(<command abs path>, command, (char *) NULL);
直接
(ex. execl("/usr/bin/ls", "ls", (char *) NULL);
)
而不是 -
execl("/bin/sh", "sh", "-c", command, (char *) NULL);
即,在shell中执行它有什么帮助。我见过大部分 在shell中执行的引用(书籍和在线),为什么?
答案 0 :(得分:4)
直接调用该程序是结构化和高效的:
调用shell来调用程序非常灵活方便:
ls *.wav
ls | wc -l
ls > file
ls "$HOME"
但是,在处理用户输入时需要非常小心,否则它将无法处理文件名中的特殊字符,并且可能允许任意代码执行。它也可能以不同的方式处理命令,具体取决于sh
引用的shell(例如bash
vs dash
)。
书籍和引用可能使用shell,因为它不是解释UNIX进程模型如何在系统调用方面工作,而是由shell处理什么和不处理,他们只能说&#34;复制粘贴来自终端的命令&#34;。
尽可能使用直接调用。