文档详情

2021题目1 shell 程序设计.docx

发布:2021-04-06约2.19万字共47页下载文档
文本预览下载声明
题目1 shell 程序设计 题目1 shell 程序设计 1.1 实验目的 Linux操作系统中shell是用户与系统内核沟通的中介,它为用户使用操作系统的服务提供了一个命令界面。用户在shell提示符($或#)下输入的每一个命令都由shell先解释,然 后传给内核执行。本实验要求用C语言编写一个简单的shell程序,希望达到以下目的: ●用C语言编写清晰易读、设计优良的程序,并附有详细的文档。 ●熟悉使用Linux下的软件开发工具,例如gcc、gdb和make。 ●在编写系统应用程序时熟练使用man帮助手册。 ●学习使用POSIX/UNIX系统调用、对进程进行管理和完成进程之间的通 信,例如使用信号和管道进行进程间通信。 ●理解并发程序中的同步问题。 ●锻炼在团队成员之间的交流与合作能力。 1.2 实验要求 1.2.1 ysh解释程序的重要特征 本实验要实现一个简单的命令解释器,也就是Linux中的shell程序。实验程序起名为ysh,要求其设计类似于目前流行的shell解释程序,如bash、csh、tcsh,但不需要具备那么复杂的功能。ysh程序应当具有如下一些重要的特征: ●能够执行外部程序命令,命令可以带参数。.。 ●能够执行fg、bg、cd、history、exit等内部命令。 ●使用管道和输入输出重定向。 ●支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前 运行作业的前台/后台状态,以及控制作业的挂起、中止和继续运行。 除此之外,在这个实验中还须做到: ●使用make工具建立工程。 ●使用调试器gdb来调试程序。 ●提供清晰、详细的设计文档和解决方案。 1.2.2 ysh解释程序的具体要求 1. Shell程序形式 本实验的ysh程序设计不包括对配置文件和命令行参数的支持。如果实现为像bash那样支持配置文件,当然很好,但本实验并不要求。ysh应提供一个命令 提示符,如ysh,表示接收用户的输入,每次执行完成后再打印下一个命令提示符ysh。当用户没有输入时,ysh需要一直处于随时等待输入状态,同时在屏幕上显示一些必要的信息。 2. 外部命令和内部命令 在大多数情况下,用户输入的命令是执行存储在文件系统中的可执行程序,我们叫做外部命令或外部程序。ysh应当支持在执行这些程序时可以将输入输出重新定向到一个文件,并允许若干个程序使用管道串联起来。从本实验的角度来讲,我们把由管道连接起来的复合命令以及单独使用的命令统称为作业。 外部命令的形式是一系列分隔的字符串。第一个字符串是可执行程序的名字,其他的是传给这个外部程序的参数。如果第一个字符串所声明的可执行文件并不存在或者不可执行.则认为这个命令是错误的。 解释器还须支持一些内部命令,这些命令在ysh程序内部实现了特定的动作,下面是一些内部命令,如果用户提交了一个内部命令,ysh应当按照下面的描述执行相应动作。 ●exit:结束所有的子进程并退出ysh。 ●jobs:打印当前正在后台执行的作业和挂起的作业信息。输出信息应采 用便于用户理解的格式。jobs自身是一条内部命令,所以不需要显示在 输出上。 ●fg %经停止,那么让它继续运行。shell应当在打印新的命令提示符之前等待 前台运行的子进程结束。 ●bg %3.命令行 当用户在提示符后面输入命令时,输入的整行内容叫做“命令行字符串”,ysh应当保存每一条命令行字符串,直到它表示的作业执行结束,其中包括后台作业和被挂起的作业。 ysh应当给每一个命令行字符串赋一个非负整数标识符。这个整数用来标识存储作业的数据结构,作业的数据结构应包含整个命令行字符串所表示的内容。一旦命令行字符串代表的作业执行结束,ysh就要删掉表示这个作业的数据结构。标识符可以循环使用。 对于包含内部命令的命令行字符串,不需要为它们建立作业的数据结构,因为它们本身的内容全部包含在ysh程序中。 4.前台和后台作业 ysh应当能够执行前台和后台作业。shell在前台作业执行结束之前要一直等待。而在开始执行后台作业时要立刻打印出提示符ysh,让用户输入下一条命令。 前台作业的执行总是优先于执行一个后台作业,ysh不需要在打印下一个提示符前等待后台作业的完成,无论是否有后台作业的执行,只要完成一个前台作业,便立即输出提示符ysh。一个后台作业结束时,ysh应当在作业执行结束后立刻打印出一条提示信息。下面语法中会在命令语法分析程序中介绍相应的语法来支持后台作业。 5.特殊键 又称组合键。通过终端驱动程序,特殊的组合键可以产生信号给ysh,程序应当对这些信号做出适当的响应。 ●Ctrl+Z:产生SIGTSTP信号,这个信号不是挂起ysh,而是让shell挂起 在前台运行的作业,如果没有任何前台作业,则该特殊键无效。 ●Ctrl+C:产生SIGI
显示全部
相似文档