我遇到了一项工作,要求我在C语言中编写一个基本shell,以便在minix上运行,遵循下面的伪代码(1)。这是我第一次使用C,而且在一分钟之内它只是我的头脑。我刚刚设法编写程序的第一部分(提示用户输入,然后将输入解析为标记以分解为命令和参数)。但我正在努力执行命令。
我不是在寻找别人为我做的工作,然后给我答案,我真正需要的是帮助理解我需要做什么才能完成任务(即总体大纲,我可以使用的资源等。)
任何帮助将不胜感激!
*以下建议问题过于宽泛,我想指出我在这里遇到的主要问题是理解'execve'功能(即使在阅读了手册页后)
(1)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<select id="package">
<option value="Package A">Package A</option>
<option value="Package B">Package B</option>
</select>
<input type="text" id="the_total" name="total">
<input type="text" id="price" name="price">
答案 0 :(得分:0)
正如您在下面的评论中提到的,如果这是您第一次使用C,那么您应该学习如何编写基本的 Hello World 程序而不是如何从头开始编写unix shell代码!
但是既然你问过,我会给你一些你已经拥有的代码片段的指南: - )
fork()
和execve()
是非常糟糕的做法,甚至不检查你的输入是否是有效的unix命令。$> env
将打印存储在环境中的所有变量。通过执行此操作,您将看到一条看起来像这样的行,具体取决于每个操作系统:PATH = / usr / lib中/ QT-3.3 / bin中:在/ usr / local / sbin中:在/ usr / local / bin中:/ sbin目录:/ bin中:/ usr / sbin目录:在/ usr / bin中:/根/ bin中
此行包含多个与冒号“:”连接的路径。这些路径对应于存储常见系统二进制文件的文件夹。
因此,如果您要执行的命令存在,那么它的二进制文件应位于其中一个文件夹中!
char **env
。迭代它直到找到 PATH 行。stat()
函数,该函数将为您提供几个有用的信息(如果文件存在,如果它具有执行权限......)。 execve()
执行该路径。否则,如果没有创建的路径存在(stat()
返回-1)或没有正确执行,则输入可能不是命令。您还应该了解内置http://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins $> which <command>
对查找现有命令或别名非常有用这应该可以帮助您完成整个过程,但我会建议您在fork()
和execve()
上做几个教程。
祝你好运!