Exec()从文件读取

Exec() read from file

本文关键字:文件 读取 Exec      更新时间:2023-10-16

我正在创建一个基本的shell。我被困在试图让exec()从输入文件读取。这是我有的。我不确定应该给execvp()提供什么参数。这里,stringList[0]将是类似于"ls"或"cat"的东西。如果stringList[0]是ls,则文件将包含ls -a -l

一行的内容
int fd = open(iFile, O_RDONLY);
dup2(fd, 0);
close(fd);
execvp(stringList[0], ...);
cout << "Exec error!n";
exit(1);

听起来像是要从文件中读取命令,然后执行该命令。如果这是您的目标,您应该实际执行 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。您可以使用getpwuidgetpwuid_r方便地获取此信息。