【发布时间】:2015-04-22 10:10:59
【问题描述】:
我对 C 语言中 Shell 的整个概念有一些疑问。这个学期我们必须学习C,但是我大学里的人的教学技能并不是那么好。所以对于第一个任务,我们必须创建一些 shell。不要误会我的意思,我喜欢编程,我不是要你完成我的任务,我只是想要一些帮助开始,因为我有点迷失在这里。
我要做的第一件事是用 C 语言创建一个 Shell(我认为与 linux shell 脚本不同)并在 Ubuntu 虚拟机上运行它。它处于 C 编程的早期阶段,我们正在学习有关父子进程的知识。我引用“这个 shell,将接受简单的单个命令。具体来说,它
a) 将从终端读取程序的标题,
b) 将创建一个新进程来运行刚刚读取的程序并
c) 将等待进程结束。
一旦进程结束,它将读取并执行下一个命令。例如,shell 将能够运行诸如“ls”之类的命令。这让我感到困惑,因为我不明白 shell 是什么以及它实际具有什么形式,并且在互联网上阅读并不能真正帮助我. 那么你能告诉我这应该是什么样子吗?我不明白它将如何运行或如何执行 ls 之类的命令。我们被指示在命令中使用 fork 和 strtok。
提前致谢!
【问题讨论】:
-
shell 基本上是一个命令行解释器。
-
是的,我意识到这一点,但这并不能帮助我实现代码。它是否像普通程序一样编写、编译和运行?如何让它运行类似“ls”的命令?我还没有理解 shell 的基本概念。
-
这是一个正常的程序。基本上它从缓冲区中读取一行(例如,使用
fgets函数),然后它将创建一个与该行内容相对应的进程。阅读this SO topic 应该会给你一些线索。 -
shell 是可以读取命令的程序。然后,它执行这些命令。
ls是这些命令之一。所以基本上,你的任务是构建一个像基本 linux 命令行一样工作的程序。它像普通的 C 程序一样编写、编译和运行。但是当它运行时,会要求用户输入并“执行”这个输入来做用户告诉它做的事情 -
谢谢,这很有帮助!对于“ls”示例,我基本上是在运行程序时将 ls 或任何其他命令作为参数,然后用 strtok() 和 exec() 找到这个命令吗?