【5】Linux 命令环境下 C 语言实践_用 C/C++构造一个简单的 shell_设计文档

链接:完整实验内容-文章【1】看这里

1、编写 Shell 程序目的

shell 是操作系统的最外层, shell 可以合并编程语言以控制进程和文件,以及启动和控制
其他程序。
简单来说: shell 就是一个用户跟操作系统之间交互的命令解释器
设计 Shell 程序的体系结构, 模块及模块间的关系, 有助于深入理解 Shell 体系。 在实验
过程中, 学习 shell 的功能和作用。

2、运行环境

Ubuntu Linux 运行环境

3、Shell 简介

作为 Linux 灵感来源的 Unix 系统最初是没有图形化界面的,所有的任务都是通过命令行来实现的。因此, Unix 的命令行系统得到了很大的发展,逐步成为一个功能强大的系统。
Shell 是一个应用程序,它是用户与 Linux 系统的接口,允许用户向操作系统输入需要执
行的命令,有点类似于 Windows 的命令提示符,但功能更加强大。
Shell 对 Linux 系统的重要性不言而喻,它适合于比较简单的小任务,更加关注的是易于配置和维护,因此执行效率往往不是很高。 Shell 可以用来执行命令,调用 Linux 工具,还可以执行程序。 Shell 可以执行 Shell 程序,通常称为 Shell 脚本,在运行时解释执行,这就是 Shell和 Shell 脚本的关系。
Linux 系统中有各种不同的 Shell,但是默认情况下,我们默认总是作为/bin/sh 安装的标准
shell 是 GNU 工具中的 bash, bash 开源并且可移植,被广泛使用。

4、需求概述

1:用 C/C++编写一个简单的 shell 程序,实现以下基本的命令。

1) 浏览目录和文件的各种属性 ls(可以不支持参数)
2) 回显命令 echo
3) 显示文件内容 cat
4) 创建目录 mkdir
5) 删除文件 rm
6) 切换目录 cd
7) 显示当前目录 pwd
8) 文字统计 wc

2:每一条命令单独对应一个源程序文件,不允许所有命令一个源文件。写一个 makefile 来管理这些源文件。
3:写清楚 make 编译和运行的过程。
4: 提供人机友好界面: 例如提供命令列表、命令查询、命令帮助等。
5: 实现一些其他的命令, 例如 touch

5、系统分析

这个模拟 Shell 的程序用来尽可能地还原 Linux 的自带 bash 的功能。基础思想就是循环+
选择,但对于子选择的执行,有两种不同的方案:

  1. 单独编写每个命令的.c 文件,然后单独地将每个.c 文件编译生成一个可执行文件,然
    后在 MainFramwork.c 中,在每个 if 中根据传入的命令行参数用 exec 族函数调用每个命令的可执行文件。
  2. 同样单独编写每个命令的.c 文件,但是不将其单独编译为可执行文件,而是在MainFramwork.c 文件中根据 if 条件去调用每个单独命令 C 文件中的函数,以达到执行命令的目的。
    这两种方法理论上都可以实现,但在 makefile 的管理上第一种方法不是很方便,并且如果采用单独的进程的话,那么多进程之间的信息交流也是一个比较麻烦的事。综上所述,我们采用第二种方法。

6、模块设计

在这里插入图片描述
每个命令单独的分成一个功能模块, 用主模块来调用各个功能子模块。 在主模块中用一个循环来调用子模块。
每个命令的功能模块可能不止一个函数, 所以, 对于多功能参数的命令, 需要将一个命令
的模块再分为多个子模块。

7、流程图

主函数流程图:
main():
在这里插入图片描述
make():在这里插入图片描述
action():

在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手可摘辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值