shell中的exec和exec直接命令有什么区别?

时间:2015-02-19 23:19:23

标签: c

我正在编写一个使用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中执行的引用(书籍和在线),为什么?

1 个答案:

答案 0 :(得分:4)

直接调用该程序是结构化和高效的:

  • 无需调用其他进程,无需解释shell语法
  • 明确定义的输入,没有特殊字符的问题
  • 在安装程序的平台上始终保持相同的工作。

调用shell来调用程序非常灵活方便:

  • 允许执行类似shell的操作
    • Globs:ls *.wav
    • 管道:ls | wc -l
    • 重定向:ls > file
    • 各种形式的扩展:ls "$HOME"

但是,在处理用户输入时需要非常小心,否则它将无法处理文件名中的特殊字符,并且可能允许任意代码执行。它也可能以不同的方式处理命令,具体取决于sh引用的shell(例如bash vs dash)。


书籍和引用可能使用shell,因为它不是解释UNIX进程模型如何在系统调用方面工作,而是由shell处理什么和不处理,他们只能说&#34;复制粘贴来自终端的命令&#34;。

尽可能使用直接调用。