【发布时间】:2014-09-13 18:25:52
【问题描述】:
我正在尝试在 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?
【问题讨论】:
-
你到底卡在哪里了?您是否在概念上理解分配,但不知道实际编写代码?或者你不明白这个任务?你知道路径列表是什么,你应该用它做什么吗? (对于路径列表中的每个目录,在该目录中查找请求命令。)
-
欢迎来到 Stack Overflow。帮助我们帮助您...尝试完成作业,如果您遇到困难,请发布您迄今为止尝试过的代码并解释您遇到的(一件或几件)事情。
-
我理解我在如何设置我自己的路径时遇到困难的任务,当使用 execv 时搜索该路径......!
-
您可能想要使用access(2),但您应该明确扫描您的路径,以便从命令名称和你的路。