【发布时间】:2014-01-24 12:48:28
【问题描述】:
我正在制作一个玩具外壳。我想执行一个位于 PATH 变量或当前目录中的二进制文件。这就是我正在做的事情:
execl(filePath," -e ",com.arguments,NULL); //e.g of filePath: /home/dino/programs/mywrapper
现在它适用于某些可执行文件,如which 命令。但是对于像tar 这样的命令,就会抛出一大堆错误。
基本上我想要的只是execl 在我的shell 中执行filePath 中提到的可执行文件。我该怎么做?
编辑:
com.arguments 是参数列表。例如在which bash 中,bash 成为我的论点。在tar -zvcf bazinga.tar.gz bazinga/,-zvcf bazinga.tar.gz bazinga/ 成为我的论点等。
【问题讨论】:
-
在拨打
execl()之前,您是否先拨打fork()? -
是的,我正在调用 fork()
-
请记住,您传递给您
exec的程序的参数就是该程序中的argv。所以第一个参数(argv[0])应该是程序名。 -
如果您告诉我们您遇到了哪些错误,甚至可能准备了一个仍然可以显示问题的最小工作示例,也许会更容易回答这个问题?
-
如果
com.arguments是参数列表,您可能希望使用execv而不是execl。