【发布时间】:2014-02-05 04:15:04
【问题描述】:
我试图让我的程序使用 exelp() 运行 shell 命令。用户基本上输入了一个 shell 命令,该命令由exelp() 在新的 shell 中存储然后执行。
假设用户输入了“ls -l /bin/??”,它又被变量command[] 捕获。如何让这个文本字符串在 shell 环境中执行。
我最接近了解如何做到这一点的方法是 execlp("/bin/sh", "-c", command, (char *)NULL); ,其中 /bin/sh 启动一个迷你外壳,-c 启用外壳接受字符串,倒数第二个参数只是捕获的字符串早些时候。我知道system() 是这里的一个选项,但出于教育目的,我想用 execlp 来做这件事。
我在这里缺少什么?提前致谢。
【问题讨论】:
-
exec系列中没有调用单个参数字符串。您的选项是字符串列表或字符串数组。这意味着在使用exec调用之一之前,您需要自己将输入字符串解析为单独的参数。你在上面手工做到了。现在您需要以编程方式进行。 -
您只能在非常有限的情况下使用
execlp();您必须在编译时知道参数的数量。您通常使用execvp()代替。