我正在尝试使用C作为类项目的一部分来构建自己的shell。我们需要使用execv并实现我们自己的路径。为了更好地理解,这里是一个问题:
默认情况下,路径列表为空,但可以增长到任意大小。您应该实现内置命令来控制此变量:
path [+|- /some/dir]
path
(不带参数)显示列表中用冒号分隔的所有条目,例如“ / bin:/ usr / bin”。path + /some/dir
将给定的路径名附加到路径列表中。path - /some/dir
从路径列表中删除给定的路径名。到目前为止,我误读了作业并使用了execvp。请您介绍一下如何创建我自己的path变量,并为执行的每个命令搜索目录中的目录并将其添加到路径中?还是我可以看一下使用execv编写的简单外壳?
我看到了http://linuxgazette.net/111/ramankutty.html,但是我发现搜索有点太复杂了,他使用了execve。
到目前为止,我有char * mypath变量,该变量最初为null。但用户可以使用path + some / dir或path-/ some / dir添加或删除。 execv的语法是execv(“ / some / dir”,argv)我如何在可执行文件的路径中搜索并将其传递给execv。...例如mypath = / bin / ls;当我通过execv(mypath,argv)时不起作用...那么如何将路径传递给execv?
最佳答案
我猜测您应该使用excev
的原因恰恰是它没有考虑环境的路径,但是调用必须提供函数的完整路径。
由于这是一个班级项目,因此您应该编写代码-编写代码是您学习如何做事的方法,这比从互联网上进行粘贴复制要多得多,因此我不会编写代码来解决问题。问题,而是描述解决方案。
您将需要保留一个路径条目列表-通过path + some/dir
和path - some/dir
机制进行调整-因此,这些命令当然需要在您的Shell中处理,并且它们应该从您的路径条目列表中添加/删除。
然后执行某项操作时,例如输入“ mycommand”,则必须扫描路径条目列表,并检查路径条目指定的目录中是否存在名称为“ mycommand”的文件,该文件可以是已执行(已在目录条目中设置了执行位)。如果是这样,请在当前路径条目的字符串上调用execv
,并将其串联。 (例如,您可以生成串联的字符串并使用stat
函数获取有关文件的信息)
请检查是否有错误,并报告是否有问题。
请不要尝试在互联网上找到别人的外壳。那不是您的学习方式,如果您实际上没有从课堂练习中学习,那么一旦完成学业,您极有可能不会成功-这最终就是您为什么要上学了,对吗?
关于c - 使用execv在C中拥有自己的shell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25826294/