使用execv在C中拥有自己的shell

时间:2014-09-13 18:25:53

标签: c shell execv

我正在尝试在C中构建自己的shell作为类项目的一部分。我们需要使用execv并实现我们自己的路径。为了更好地理解这里的问题是:

  

默认情况下,路径列表为空,但可能会增长到任意大小。您应该实现内置命令来控制此变量:

path [+|- /some/dir]
     
      
  • path(不带参数)显示以冒号分隔的列表中的所有条目,例如" / bin中:在/ usr /仓"

  •   
  • path + /some/dir将给定的路径名​​追加到路径列表中。

  •   
  • path - /some/dir从路径列表中删除给定的路径名​​。

  •   

到目前为止,我误读了作业并使用了execvp。请问您能否详细了解如何创建自己的路径变量,并为每个执行的命令搜索它所在的目录并将其添加到路径中?或者是否有使用execv编写的简单shell我可以看看?

我看到http://linuxgazette.net/111/ramankutty.html,但我发现搜索有点过于复杂,他使用了execve。

到目前为止,我有char * mypath变量,最初为null。但是用户可以使用路径+ some / dir或path - / some / dir添加或删除。 execv的语法是execv(" / some / dir",argv)我如何搜索可执行文件的路径并将其传递给execv ....例如mypath = / bin / ls;当我通过execv(mypath,argv)时它不起作用...所以我如何将路径传递给execv?

1 个答案:

答案 0 :(得分:1)

我猜你应该使用excev的原因正是它没有考虑环境的路径,但是调用必须提供函数的完整路径。

由于这是一个类项目,你应该编写你的代码 - 编写代码就是你学习如何做事的方式,而不仅仅是从互联网上复制粘贴,所以我不会写代码解决问题,而是描述解决方案。

您需要保留一个路径条目列表 - 通过path + some/dirpath - some/dir机制进行调整 - 所以这些命令需要在shell中处理,当然,它们应该添加/删除从您的路径条目列表。

当您执行某些操作时,输入“mycommand”,您将必须扫描路径条目列表,并检查路径条目指定的目录中是否存在名为“mycommand”的文件可以执行的(在目录条目中设置了执行位)。如果是这样,请在当前路径条目的字符串上调用execv并连接“mycommand”。 (您可以生成连接字符串并使用stat函数来获取有关文件的信息,例如)

检查错误,并报告是否出现问题。

请不要试图在互联网上找到别人的外壳。这不是你学习的方式,如果你实际上没有从课堂练习中学到东西,那么一旦你完成学业,你很可能不会成功 - 而这最终是为什么你要上学,对吧?