-2

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

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

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

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

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

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

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

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

4

1 回答 1

1

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

由于这是一个课堂项目,您应该编写代码 - 编写代码是您学习如何做事的方式,而不是从互联网上复制和粘贴,所以我不打算编写代码来解决问题问题,而是描述解决方案。

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

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

一定要检查错误,如果出现问题,请报告。

请不要试图在互联网上寻找别人的外壳。这不是你学习的方式,如果你没有真正从课堂练习中学习,一旦你完成学业,你很可能不会成功——这就是你最终上学的原因,对吧?

于 2014-09-13T18:46:36.063 回答