看完了APUE后,打算写一个简单的Shell练练手,于是就实现了一个最最基本的Shell,下面先看看到底Shell是什么?
Shell是什么
shell,翻译成中文就是壳的意思,在操作系统中就是指包裹着操作系统内核,用来和用户进行交互的那个界面。如下图中所示:
也就是说shell实际上是用户和系统内核之间的一条纽带,用于用户和内核之间交互。比如说用户希望改变某个文件的权限,在Linux中需要使用chmod这个系统调用。然而身为一个用户你却不知道如何调用这个命令。通过Shell我们就可以完成这个任务,无论是什么版本的Linux,打开终端后敲入chmod即可完成这个系统调用,而终端中的Shell负责完成用户态向内核态的切换和相关接口的调用。
需要实现什么
1. Linux提供的系统调用
首先我们肯定需要Shell能够执行Linux提供的系统调用,然而这一块儿非常easy的在于大部分的系统调用的可执行文件都由操作系统自带了,所以我们需要做的就是像很多书上写的一样,按下图三步走就可以实现一个最最最最基本的Shell:
2. 能再给力点儿吗?
当然我们说了是为了锻炼在APUE里面学到的知识,所以只用fork,exec和wait这几个进程控制调用是无法满足我们的目的的,所以我们还需要实现的有:
- 管道
- 输入输出重定向
- cd命令
- 基本的alias(我还没写完,程序内部可以使用,没有留出用户接口)
- 待补充
3. 还能再给力点儿吗?
我们知道在一般的Linux的Shell中,例如bash,其实这本身已经是一门脚本语言了,但是由于本人并没有编译原理和语言解释器方面的知识,所以我们的Shell真的只是一个简单的壳而已,并没有实现语法解释器的功能。如果读者有能力可以自己实现,不过有这份能力,估计也不用看这文章。。。。