问题描述
探索、理解并掌握操作系统命令释器的设计原和实现机制,基于 Linux内核进行相应命令解释程序的设计和实现,并在 Linux操作平台上加以实现。
实验要求
Linux 命令解释程序功能设计要求:
(1)选取和设计实现一组内部命令(五条以上);
(2)外部命令执行采用直接调用 exec 系统调用的方式来实现;
(3)至少一条内部命令采用直接调用相应系统调用的方式来实现;
(4)系统环境变量(至少包括当前目录)支持;
(5)在 Linux 操作系统上启用(或替换原命令解释程序 Shell)并测试验证。
项目结构
函数一览
数据结构和全局变量定义
详细设计
内部命令cd的设计
cd命令的作用是切换工作目录,直接使用了系统调用,设计如下:
该函数使用了syscall 来调用系统调用SYS_access 来判断目录是否存在,以及使用了系统调用 SYS_chdir 来切换目录。
内部命令pwd的设计
pwd命令的作用是显示工作目录,设计如下:
该函数使用了 getcwd 函数来获取路径并且存入字符数组wd中,用puts输出
内部命令echo的设计
echo命令的作用是输出命令里的字符,设计如下:
内部命令history的设计
history命令的作用是显示历史输入的命令,设计如下:
内部命令exit的设计
exit的作用是退出shell
该函数将全局变量 IS_STOP 置为1,主循环独取后会停止
环境变量的支持
该函数使用access搜索在给定路径集合env里是否存在名为 arr[0] 的可执行程序,若存在则执行。
外部命令的实现
该函数使用exec调用外部命令
主函数设计
验证测试
欢迎界面
内部命令
cd 和 pwd 命令
用pwd命令显示当前目录,cd切换后再用pwd显示切换后的目录
与预期相符
echo 命令
输出hello 17281144
与预期相符
history 命令
输出历史
与预期相符
exit命令
退出shell
与预期相符
环境变量
将如下代码编译成为名为 hello 的可执行文件,放在 /home 目录下,并且将目录加入 env 数组。
直接输入hello
与预期相符
外部命令
以ping 命令作为示例
与预期相符