我正在创建一个基本的shell。我一直试图让exec()从输入文件读入。这就是我所拥有的。我不确定我应该给execvp()提供什么参数。这里,stringList [0]将是“ls”或“cat”的行。如果stringList [0]是ls,则文件将包含ls -a -l </ p>行的内容
redirect_uri
答案 0 :(得分:0)
听起来您想从文件中读取命令然后执行该命令。如果这是您的目标,那么您应该实际执行 shell 。
open
然后dup2
的当前方法不会导致exec
从文件中读取,因为exec
永远不会从标准输入读取。它只从可执行文件中读取(加载程序映像)。您当前的方法是重定向输入,因此如果exec
成功,新程序将iFile
作为其标准输入文件。
你可以这样做:
execl(shell, basename(shell), iFile, (char*)0);
示例:如果iFile
是字符串"myCommand.sh"
,shell
是/bin/bash
,那么basename(shell)
会bash
,这类似在命令行上运行它:
$ bash myCommand.sh
对于shell
,您可能希望使用当前用户的默认shell。您可以使用getpwuid
或getpwuid_r
。