操作系统原理实验指导书
更新时间:2024-01-23 03:52:01 阅读量: 教育文库 文档下载
- 操作系统原理课后答案推荐度:
- 相关推荐
计算机科学与技术专业适用
操作系统原理
实验指导书
南京工业大学信息科学与工程学院
2011年9月
目 录
一、实验目的 ............................................................................................................................... 1 二、实验要求与内容 ................................................................................................................... 1 2.1 实验题目 ............................................................................................................................ 1 2.2 初始目录结构 .................................................................................................................... 1 2.3 系统操作命令简介 ............................................................................................................ 1 2.4 几点说明 ............................................................................................................................ 2 三、设计方案 ............................................................................................................................... 3 3.1 采用FAT文件格式 ............................................................................................................ 3 3.2 目录项(FCB)结构.............................................................................................................. 3 3.3 根目录 ................................................................................................................................ 4 3.4 主要函数 ............................................................................................................................ 4 3.5 用户已打开文件表(UOF) ............................................................................................ 5 3.6 程序中有关变量的说明 .................................................................................................... 5 1. 当前目录curpath数据结构 .............................................................................................. 5 2. 删除文件恢复表udtab数据结构 ..................................................................................... 5 3. 全局变量ffbp和Udelp ..................................................................................................... 5 4. 全局数组comd[5][PATH_LEN] ..................................................................................... 6 5. 全局数组temppath[PATH_LEN] .................................................................................... 6 3.7 主要函数的流程图 ............................................................................................................ 6 1. 主函数main()的流程图 ................................................................................................... 6 2. create命令流程图 ............................................................................................................. 6 3. cd命令流程图 ................................................................................................................... 7 4. del命令流程图 .................................................................................................................. 8 5. dir命令流程图 .................................................................................................................. 8 6. md命令流程图 .................................................................................................................. 9 7. rd命令流程图 ................................................................................................................... 9 8. open命令流程图 ............................................................................................................. 10 9. close命令流程图 ............................................................................................................ 10 10. write命令流程图 .......................................................................................................... 11 11. read命令流程图 ............................................................................................................ 12 12. copy命令流程图 ........................................................................................................... 12 13. ren命令流程图 .............................................................................................................. 14 14. attrib命令流程图 .......................................................................................................... 14 15. undel命令程序流程图 .................................................................................................. 15 16. FindPath( )函数程序流程图 ......................................................................................... 15
i
《操作系统实验》指导书
17. FindFCB( )函数程序流程图 ........................................................................................ 15 18. ProcessPath( )函数程序流程图 .................................................................................... 17 四、实验任务 ............................................................................................................................. 18 4.1 修改md命令 ..................................................................................................................... 18 4.2 修改Help命令或命令行预处理程序 .............................................................................. 18 1. 修改help命令的显示方式和显示内容 ......................................................................... 18 2. 修改命令行预处理程序 ................................................................................................ 18 4.3 新增fc命令,实现两个文件的比较 ............................................................................... 18 4.4 新增replace命令,实现文件取代 .................................................................................. 18 4.5 新增move命令,实现文件“搬家”及子目录改名 ..................................................... 19 4.6 新增batch命令,实现批处理 ......................................................................................... 19 4.7 修改close、type等命令,允许不带文件名参数 ........................................................... 21 4.8 完善copy命令 .................................................................................................................. 22 1. 改正某些缺陷 ................................................................................................................ 22 2. 允许覆盖同名文件(选做内容) ................................................................................ 22 4.9 增加输出重定向功能(选做内容) .............................................................................. 22 1. type命令的输出重定向形式 .......................................................................................... 22 2. dir命令的输出重定向形式 ............................................................................................ 23 4.10 修改del、copy等命令,使其可以使用统配符 *(选做内容) ............................... 23 4.11 修改copy命令,增加合并复制功能(选做内容) .................................................... 23 4.12 修改程序,实现多磁盘文件系统(选做内容) ........................................................ 24 4.13 修改磁盘块容量(选做内容) .................................................................................... 24 4.14 修改undel命令(选做内容) ....................................................................................... 25 1. 删除文件恢复表udtab不用数组存储,而直接存储在磁盘空间 ............................... 25 2. 修改undel命令的执行方式并增强其功能 ................................................................... 25 3. 采用类似于Windows的回收站方案............................................................................. 26 4.15 修改read命令,允许不带文件名参数(选做内容) ................................................. 26 4.16 修改write命令,允许不带“文件名”参数(选做内容) ........................................ 26 4.17 修改write命令,增加“删除”方式(选做内容) .................................................... 27 五、模拟文件管理系统中操作命令使用说明 ......................................................................... 27 六、学生应提交的实验材料 ..................................................................................................... 33 6.1 《实验报告》 .................................................................................................................. 33 6.2 源程序清单及其可执行文件 .......................................................................................... 33 6.3 程序测试、运行的结果 .................................................................................................. 33
ii
操作系统原理实验指导书
一、实验目的
理解操作系统文件系统的某些工作原理,学习文件操作命令的设计方法。通过实验,使学生加深对操作系统文件系统某些问题的理解,归纳学习方法和思考方法,做到理论联系实际。培养学生分析问题、解决问题的能力,提高学生软件设计能力和逻辑思维能力。
二、实验要求与内容
2.1 实验题目
模拟文件管理系统的设计
设计实现一个简单的模拟文件管理系统,包括目录文件、普通文件,以及一些文件操作命令和目录操作命令(例如可以模仿DOS的有关命令)。具体要求如下列2.2和2.3。
2.2 初始目录结构
程序初始化时构造如图1所示的目录结构。
根目录 bin usr auto dev user lib bin 【图例说明】 li sun ma 目录文件 图1 初始目录树 无框 普通文件 图中auto是(普通)文件(初始化时假设是空文件),其余都是子目录(目录文件)。
2.3 系统操作命令简介
在模拟文件管理系统中,要求可以实现如下操作:
? 改变当前目录:cd [<目录名>]。当前目录(工作目录)转移到指定目录下。指定目录
不存在时,给出错误信息。若命令中无目录名,则显示当前目录路径。
? 创建文件:create <文件名> [<属性>]。创建一个指定名字的新文件,即在目录中增加
一目录项,不考虑文件的内容。对于重名文件给出错误信息。 ? 删除文件:del <文件名>。删除指定的文件,即清除其目录项和回收其所占用磁盘空间。
对于只读文件,删除前应询问用户,得到同意后方能删除。当指定文件正在使用时,显
1
《操作系统实验》指导书
? ? ? ?
? ? ? ? ? ?
?
示“文件正在使用,不能删除”的信息,当指定文件不存在时给出错误信息。
显示目录:dir[ <目录名>[ <属性>]]。显示“目录名”指定的目录中文件名和第一级子目录名。若指定目录不存在,则给出错误信息。
创建目录:md <目录名>。在指定路径下创建指定目录,若没有指定路径,则在当前目录下创建指定目录。对于重名目录给出错误信息。
删除目录:rd 目录名。若指定目录为空,则删除之,否则,给出“非空目录不能删除”的提示。不能删除当前目录。
打开文件:open <文件名>。若指定文件存在且尚未打开,则打开之,并在用户打开文件表(UOF)中登记该文件的有关信息。若指定文件已经打开,则显示“文件已打开”的信息;若指定文件不存在,则给出错误信息。只读文件打开后只能读不能写。 写文件:write <文件名> [<位置>][insert]。在文件的指定位置处写入新内容。
读文件:read <文件名> [<位置m> [<字节数n>]]。从已打开文件中读指定内容并显示。 关闭文件:close <文件名>。若指定文件已打开,则关闭之,即从UOF中删除该文件对应的表项。若文件未打开或文件不存在,分别给出有关信息。
显示文件内容:type <文件名>。显示指定文件的内容。若指定文件不存在,则给出错误信息。
复制文件:copy <源文件名> <目标文件名>。命令功能:为目标文件建立目录项,分配新的盘块,并将源文件的内容复制到目标文件中。
文件改名:ren <原文件名> <新文件名>。将指定文件的名字改为“新文件名”。若原文件不存在,给出错误信息。若原文件存在,但正在使用,也不能改名,同样显示出错信息。应检查新文件名是否符合命名规则以及是否存在重名问题。 显示、修改文件或目录属性:attrib <文件名>[ <文件属性>]。若命令中无“文件属性”参数,则显示指定文件的属性;若命令中有“文件属性”参数,则修改指定文件的属性。此命令对目录名同样适用。
2.4 几点说明
? 命令中的目录名和文件名可以统称为路径名,支持绝对路径(又称全路径)和相对路径; ? 路径名是由目录结构中各级目录文件名和普通文件名(必定是最后一个名)用分隔符“/”
连接而成的字符串组成。其中以字符“/”开始的路径名是绝对路径,表示从根目录开始;不是以字符“/”开始的路径名是相对路径,表示从当前目录开始。当前目录又称工作目录。
? 本系统规定,名字(文件名或目录名)的命名规则如下:
(1) 名字长度不能超过FILENAME_LEN-1个字节,即10个字符(符号常数FILENAME_LEN为
11)。允许输入的名字超过10个字符,但只有前10个字符有效;
(2) 名字一般由字母(区分大小写)、数字、下划线等组成,名字允许是汉字; (3) 名字不能包含以下16个字符之一: \ * + , / : ; < = > ? [ \\ ] | space(空格)
(4) 名字中允许包含字符“.”,但它不能是名字的第一个字符,故“.”、“.abc”、
“..”和“..abc”等等都是不合法的名字。“..”代表父目录是例外,但它并非由用户通过键盘输入的名字,故不需要符合名字的命名规则。
? 本系统中,命令名(如dir)和命令参数中的有关关键字(如append或app、insert或ins
等)不区分大小写。文件名和目录名中的字母是区分大小写的。
? 命令格式中,“<...>”代表某个字符串 ,“[ ]”中内容为可选项。
2
《操作系统实验》指导书
三、设计方案
本系统提供的参考程序在C++环境中开发,下面介绍系统的设计方案。
3.1 采用FAT文件格式
文件在磁盘上的组织采用FAT文件格式,为了设计程序方便,本系统的FAT表用整型数组FAT[K]表示(K为总盘块数,本系统中假定K=5000,即共有5000个盘块),而实际的操作系统,FAT表是存储在磁盘中的,当系统启动时装入内存。FAT[0]中存储空闲盘块数。 磁盘空间用字符数组Disk[K][SIZE] (其中SIZE为每个盘块的字节数,即盘块的容量)表示。本系统设定磁盘块容量为64。
3.2 目录项(FCB)结构
本模拟系统的文件目录项(FCB)结构如下:
文件名 (11字节) struct FCB {
char FileName[11]; char Fattrib; short int Addr; short int Fsize; };
属性 (1字节) 首块号 (2字节) 文件长度 (2字节) //每个目录项16个字节
//文件名最多10个字符且以'\\0'结尾 //文件属性 //文件首块号 //文件长度
? 为简单,本系统不考虑文件扩展名,文件名为1~10个字符,以结尾标记'\\0'存储(实
际操作系统目录项中文件名一般没有结尾标记),命令中输入的文件名若超过10个则截取前10个字符。
? 文件属性为1个字节,其二进制位对应的属性如下图所示。
D7 0 D6 0 D5 0 D4 0/1 D3 0 D2 0/1 D1 0/1 D0 0/1 1111表表表表 示示示示 系目隐只统 录 藏 读
? 文件的首块号Addr=0代表空文件(此时文件长度Fsize=0)。文件名(目录名)的第一
个字符的ASCII码为0E5H或00H,代表空目录项。其中0E5H是目录项被删除后的标志,00H代表该目录项从未使用过。
? 每个目录项占用16个字节,因系统中假设磁盘块大小SIZE=64,因此,每个盘块可
存储4个目录项。
? 除根目录外,每个目录中的第一个目录项存储父目录的FCB(该目录项的名字为
“..”),其地址是父目录的首块号,它的作用是相当于指向父目录的指针,用于实现从该目录退回父目录。目录项“..”是在创建目录时,由系统自动建立的,它不能被rd命令删除。
3
《操作系统实验》指导书
3.3 根目录
本系统假设根目录存储在1~30号盘块中,即存储在Disk[1]~Disk[30]的盘快中。因每个盘块可存储4个目录项,故本系统根目录中的文件目录项及子目录项最多共计120个。从31号盘块开始为文件区,用于存储文件及子目录。
本系统初始化时,图1所示的目录树的磁盘分配情况如图2所示。
Disk[1] —— bin,usr,auto,dev Disk[31]:.. Disk[33]:.. Disk[32]:..,user,lib,bin Disk[30] Disk[35]:.. Disk[36]:.. Disk[34]:..,li,sun,ma Disk[37]:.. Disk[38]:.. Disk[39]:.. 图2 初始目录树的磁盘空间分配
根目录
3.4 主要函数
系统参考程序的主要函数如下: main() 主函数
AttribComd() attrib命令处理函数 CdComd() cd命令处理函数 CloseComd() close命令处理函数 CopyComd() copy命令处理函数 CreateComd() Create命令处理函数 DelComd() del命令处理函数 DirComd() dir命令处理函数 MdComd() md命令处理函数 OpenComd() open命令处理函数 RdComd() rd命令处理函数 ReadComd() read命令处理函数 RenComd() ren命令处理函数 TypeComd() type命令处理函数 UndelComd() undel命令处理函数 WriteComd() write命令处理函数 ParseCommand() 分析、分解命令行 ExecComd() 执行命令
FindPath() 查找指定目录路径的首块号 FindFCB() 查找指定文件(或目录)的首块号
ProcessPath() 将路径名分离成目录路径与文件名两部分
4
《操作系统实验》指导书
3.5 用户已打开文件表(UOF)
设置一张“用户已打开文件表”(UOF),用于记录用户当前正在使用文件的情况。本系统允许用户最多同时打开或建立S个文件,故用户已打开文件表UOF共有S个登记栏。 用户请求打开或建立一个文件时,相应的文件操作把有关该文件的信息登记到UOF中。 UOF表项的结构如下:
struct UOF //定义用户打开文件表的结构 {
char fname[PATH_LEN]; //文件全路径名
char attr; //文件属性,1=只可读;0=可读写 short int faddr; //文件的首块号 short int fsize; //文件大小(字节数)
FCB *fp; //指向该文件的目录项指针
short int state; //状态:0=空表项;1=新建;2=打开
short int readp; //读指针,指向某个要读的字符位置,0=空文件 short int writep; //写读指针,指向某个要写读的字符位置 };
本程序中,用户打开文件表用数组UOF uof[S]表示,其中S=32,即最多允许同时打开32个文件。读指针和写指针用于指出对文件进行存取的当前位置。fp指向该UOF登记项对应的文件的目录项。系统启动时, UOF常驻内存,退出系统时,UOF不需要保存。
3.6 程序中有关变量的说明
1. 当前目录curpath数据结构
struct CurPath {
short int fblock; //当前目录的首块号 char cpath[PATH_LEN]; //当前目录路径字符串 };
当前目录用全局变量curpath存储:CurPath curpath; 根目录的路径字符串cpath是“/”,首块号为1。 2. 删除文件恢复表udtab数据结构
struct UnDel { //恢复被删除文件信息表的数据结构
char gpath[PATH_LEN]; //被删除文件的全路径名(不含文件名) char ufname[FILENAME_LEN];//被删除文件名
short ufaddr; //被删除文件名的首块号
short fb; //存储被删除文件块号的第一个块号(链表头指针) //首块号也存于fb所指的盘块中 };
与实际系统不同,为简化程序设计,本系统的被删除文件恢复表用(全局变量)数组udtab存储,定义为:UnDel udtab[DM];程序中DM值为40,即最多保存40个被删除文件的信息(若删除文件数超过40个时,总是保持最新的40个被删除文件信息)。一个被删除文件恢复后,其在udtab表中的信息将被删除。退出系统时该表可存于文件UdTab.dat中。 3. 全局变量ffbp和Udelp
short Udelp; 它是udtab表的第一个空表项的下标,系统初始化时为0。当Udelp=DM时,表示表已满,需清除最早的表项(后续表项依次前移)。系统退出存盘时,其值保存到0号
5
《操作系统实验》指导书
盘块Disk[0]中,以便下次启动系统使用。
short ffbp; 它是分配盘块时FAT表的起始指针(下标),这样使得分配盘块类似于分区存储管理的“循环首次适应”分配算法,这有利于被删除文件的恢复。系统退出存盘时,其值也保存到0号盘块Disk[0]中。 4. 全局数组comd[8][PATH_LEN]
char comd[8][PATH_LEN]; 它在分析命令时使用,其中comd[0]存放命令字符串,comd[1],...,comd[7]用于存放命令参数。 5. 全局数组temppath[PATH_LEN]
char temppath[PATH_LEN]; 用于临时存储文件的路径名(绝对路径名而非相对路径名)。例如,设当前目录为/usr,执行命令open user/boy时,系统将文件boy的全路径名(即绝对路径名) \/usr/user/boy\,存放在temppath中,在登记UOF表项时,再将temppath存储到表项的fname域中。其他一些命令处理过程中也会用到temppath。
3.7 主要函数的流程图
1. 主函数main()的流程图
主函数main()的流程图如图3所示。
开始 初始化 输入命令行 是exit吗? 否 调用函数ParseCommand( ) 分解命令行 调用执行命令函数ExecComd( ) 执行输入的命令 是 要保存数据吗? 是 保存相关数据 结束 否 采用条件编译实现: 初始化目录树、FAT、Disk、UOF等 或者从文件读入FAT、Disk等数据 图3 主函数流程图
2. create命令流程图
创建新文件的命令格式如下:
create <文件名>[ <文件属性>]
命令中的“文件属性”规定了文件的使用权限,分为“只读”、“隐藏”、“系统”等,分别用“r”、“h”、“s”的形式表示,程序内部分别用1、2、4表示(参见3.2节的介绍),它们可以组合使用,例如“rh”表示“只读”且“隐藏”属性的文件,其属性值为3,又如“rhs”表示“只读”且“隐藏”且“系统”属性的文件,其属性值为7。若命令中无可选项“文件属性”,则创建的文件是属性值为0的普通文件,即不是只读文件,也不是隐藏文件,也不是系统文件。
create命令中的“文件名”允许是绝对路径名或相对路径名,例如命令 create /usr/user/boy
表示在根目录的usr子目录中的user子目录中建立文件boy,该文件为普通文件。又如 create bin/mail rh
6
《操作系统实验》指导书
表示在当前目录中的bin子目录中建立文件mail,该文件为“只读”且“隐藏”属性的文件。执行create命令时,当路径不存在或有同名文件,则分别给出错误信息。 create命令处理函数CreateComd()的简化流程图如图4所示。
开 始 查找“文件名”中的路径, 并将该路径存于temppath中。 否 显示:路径错误 返回 该目录中有 该文件? 否 在该目录中找到空登记栏登记该文件名的目录项;在UOF中登记该文件,状态=建立,读指针=0(空文件),? 显示“文件创建成功” 显示:同名文件 不能建立 是 该路径存在吗? 是 查temppath中最后一目录 返回 图4 “创建文件”流程图
3. cd命令流程图
命令形式:cd [<目录名>]。命令功能:改变当前目录,即把指定目录变为当前目录(工
作目录)。指定目录不存在时,给出错误信息。若命令中无目录名,则显示当前目录路径名。cd命令的处理函数为CdComd(),其简单流程图如图5所示。
开始 命令格式正确吗? 是 否 命令中有参数吗? 是 显示当前目录 指定路径正确吗? 是 将查找过程得到的全路径名以及指定目录的首块号保存到当前目录变量中 返回 图5 cd命令函数流程图 否 显示错误信息 否 7
《操作系统实验》指导书
4. del命令流程图
命令形式:del <文件名>。命令功能:删除指定的文件,即清除其目录项和回收其所占用磁盘空间。对于只读文件,删除前应询问用户,得到同意后方能删除。当指定文件正在使用时,显示“文件正在使用,不能删除”的信息,当指定文件不存在时给出错误信息。del命令的处理函数为DelComd(),其简单流程图如图6所示。
开始 否 开始 否 命令格式正确吗? 是 调用否 ProcessPath( )查找指定路径 指定路径正确吗? 是 调用FindFCB( )查找指定文件 指定文件存在吗? 是 文件正在使用吗? 否 删除指定文件的目录项 回收该文件占用的磁盘空间 返回 图6 del命令函数流程图
是 显示相关的错误信息 否 否 命令格式正确吗? 是 否 调用FindPath( )查找指定路径 指定路径正确吗? 是 在指定目录中逐个查找目录项,显示文件或目录的名字,以及显示文件的长度或子目录标志。 最后显示文件和目录的统计数以及文件的总字节数和磁盘剩余字节数。 返回 图7 dir命令函数流程图
显示相关的错误信息 否 5. dir命令流程图
命令形式:dir [<目录名>] [<属性>]。命令功能:显示“目录名”指定的目录中文件名和第一级子目录名。若指定目录不存在,则给出错误信息。如果命令中没有指定目录名,则显示当前目录下的相应内容。若命令中无“属性”参数,则显示指定目录中“非隐藏”属性的全部文件名和第一级子目录名;若命令中有“属性”参数,则仅显示指定属性的文件名和目录名。属性参数的形式是“|属性符号”,其中属性符号有r、h和s三种(不区分大小写),分别表示“只读”、“隐藏”和“系统”三种属性,它们可以组合使用且次序不限。例如“|rh”,表示要求显示同时具有“只读”和“隐藏”属性的文件和目录名。 dir命令显示文件名时,同时显示该文件长度;显示目录名时,同时显示“
dir /usr |h 显示根目录下usr子目录中全部“隐藏”属性的文件名和子目录名 dir .. 显示当前目录的父目录中全部“非隐藏”属性的文件和子目录名(包
括“只读”、“系统”属性的文件和目录名也显示)。
dir命令的处理函数为DirComd(),其简单流程图如图7所示。
8
《操作系统实验》指导书
6. md命令流程图
命令形式:md <目录名>。命令功能:在指定目录路径下创建指定子目录。若没有指定路径,则在当前目录下创建指定子目录。对于重名目录给出错误信息。md命令的处理函数为MdComd(),其简单流程图如图8所示。
7. rd命令流程图
命令形式:rd <目录名>。命令功能:删除子目录。若指定目录为空(仅有一个“..”目录项的目录为空目录),则删除之,否则,给出“非空目录不能删除”的提示。不能删除当前目录。rd命令的处理函数为RdComd(),其简单流程图如图9所示。
开始 否 命令格式正确吗? 是 指定路径正确吗? 是 新目录有重名吗? 否 否 是 在指定目录中查找空目录项(若已无空目录项,则为其分配新的盘块),找到后为新目录登记目录项。为新目录分配1盘块,用于登记该目录的第一个目录项,即“..”目录项。 返回 图 8 md命令函数流程图
显示相关的错误信息 开始 命令格式正确吗? 是 指定路径正确吗? 是 要删当前目录吗? 否 指定目录空的吗? 是 回收指定目录的磁盘空间,在其父目录中删除指定目录对应的目录项。 返回 图 9 rd命令函数流程图
否 是 否 否 显示相关的错误信息 9
《操作系统实验》指导书
8. open命令流程图
命令形式:open <文件名>。命令功能:打开文件。若指定文件存在且尚未打开,则打开之,并在用户打开文件表(UOF)中登记该文件的有关信息。若指定文件已经打开,则显示“文件已打开”的信息;若指定文件不存在,则给出错误信息。open命令的处理函数为OpenComd(),其简单流程图如图10所示。
9. close命令流程图
命令形式:close <文件名>。命令功能:关闭文件。若指定文件已打开,则关闭之,即从UOF中删除该文件对应的表项。若文件未打开或文件不存在,分别给出有关信息。close命令的处理函数为CloseComd(),其简单流程图如图11所示。
开始 命令格式正确吗? 是 指定文件打开了? 否 否 开始 命令格式正确吗? 是 指定路径正确吗? 否 否 是 指定文件存在吗? 是 是 否 文件已打开了吗? 否 UOF表已满了吗? 否 是 显示相关的错误信息 在UOF中登记指定文件的有关信息。显示文件打开成功。 返回 图10 open命令函数流程图 是 显示相关的错误信息 指定文件的首块号和长度保存到其目录项中;删除指定文件在UOF中的登记项。 显示文件关闭成功。 返回 图11 close命令函数流程图 10
《操作系统实验》指导书
10. write命令流程图
命令形式:write <文件名> [<位置>[ insert]]。 命令功能:向文件中写入信息。
命令中若无“位置”参数,则在写指针所指位置写入文件内容;若提供“位置”参数,则在对应位置写入内容。位置可以是整数n,是指在文件的第n个字节处开始写入(位置从1开始编号)。“位置”参数可以是“append”(前3个字符有效,不区分大小写),表示在文件尾部写入信息;参数“insert”(前3个字符有效,不区分大小写)表示新写入的内容插入到对应位置,对应位置开始的原内容后移。若无参数“insert”,写入内容代替文件原先的内容(改写方式)。写入内容中的“\\n”代表“回车”符。写入完毕调整文件长度和写指针值。若文件未打开或文件不存在,分别给出错误信息。本系统约定:刚打开的文件,其写指针指向文件末尾。目前参考程序的write命令只有“插入”和“改写”两种功能,尚未提供“删除”功能。
write命令的处理函数为WriteComd(),其简单流程图如图12所示。
开始 是 从文件尾部写 改写方式。 第2参数是|app? 命令中有文件名? 否 第2参数是|ins? 否 写入位置正确? 是 指定文件已打开? 否 显示:“命令中无文件名” 显示:“文件未打开。” 显示:“只读文件不能写” 返回 否 是 从写指针位置写,插入方式。 否 否 是 是只读文件吗? 否 是 显示“写入位置错误。” 从写入位置写暂定为改写方式。 有第3参数吗? 是 参数只有文件名? 是 等待用户输入写入的内容 从写指针位置写 改写方式。 返回 是 第3参数是ins? 否 显示“命令参数错误。” 从写入位置写, 插入方式。 输入内容接到写入点 是插入方式吗? 否 是 写入点开始的原内容接到写入内容后边 图12 write命令程序流程图
11
《操作系统实验》指导书
11. read命令流程图
命令形式:read <文件名> [<位置m> [<字节数n>]]。命令功能:从已打开的文件中读文件内容并显示。若无“位置”参数,则从读指针所指位置开始读。若有“位置”参数,则从指定位置处开始读。位置m是指从文件开头第m个字节处读(m从1开始编号)。若无“字节数n”参数,则从指定位置读到文件末尾;若有“字节数n”参数,则从指定位置开始读n个字节。若文件未打开或文件不存在,分别给出错误信息。 read命令的处理函数为ReadComd(),其简单流程图如图13所示。
开始 命令格式正确吗? 是 文件已打开了吗? 否 否 显示“命令中参数太多或太少” 显示“文件未打开或不存在。” 显示“是空文件,不能读。” 从读指针所指位置读到文件尾部 是 是 是空文件吗? 否 是 命令只有1个参数? 否 读位置正确吗? 是 命令有第3参数? 否 显示“命令中读位置错误。” 从读位置开始读到文件尾部 从读位置开始读n个字节 否 是 是 否 显示“命令中读字节数错误。” 读字节数n正确吗? 按命令要求读出信息并显示 调整读指针 返回 图13 read命令程序流程图
12. copy命令流程图
命令形式:copy <源文件名> <目标文件名>。命令功能:为目标文件建立目录项,分配新的盘块,并将源文件的内容复制到目标文件中。若目标文件与源文件所在的目录相同,则只能进行更名复制,此时目标文件名不能省;若目标文件与源文件所在的目录不同,则既可更名复制也可同名复制,同名复制时目标文件名可省。 例如,命令
copy mail email
(1) 若当前目录中不存在email(目录或文件),则该命令将当前目录中的文件mail,复制
成当前目录下的文件email;
(2) 若当前目录下存在email,但email是子目录名,则将当前目录中的文件mail,复制到
12
《操作系统实验》指导书
当前目录中的email子目录内,文件名为mail(同名复制);此时若email目录内已经存在名字为mail的文件或目录,则出现重名错误;
(3) 若当前目录内存在email文件,则出现重名错误(并不询问是否覆盖);
(4) 若当前目录内不存在源文件mail(或者虽然有mail,但它是子目录名),则也报错。 【注】
? 在同一目录中,各目录项不能重名(不管是文件名还是子目录名) ? 上述(2)(3)是为了简化程序设计,真实系统一般与这种处理方式有区别,请参见实习
任务的“完善copy命令”中的叙述。
copy命令的处理函数为CopyComd(),其简单流程图如图14所示。
开始 命令格式正确吗? 是 源文件存在吗? 否 否 显示“命令中参数太多或太少” 显示“源文件不存在。” 显示“文件正在使用不能复制。” 是 源文件已打开? 否 是 文件复制到当前目录,同名复制 是 命令只有1个参数? 否 目标路径正确吗? 是 目标文件名正确? 是 目标文件名冲突? 否 目标文件与 子目录同名? 是 否 显示“目标文件名错误。” 否 显示“路径名错误。” 显示“目标文件重名错误。” 源文件更名复制到目标目录中 否 是 源文件同名复制到该子目录中 子目录有源文件同名文件? 是 否 为目标文件建立目录项,分配磁盘空间,复制源文件内容到新分配的磁盘空间。 返回 图14 copy命令程序流程图
13
《操作系统实验》指导书
13. ren命令流程图
命令形式:ren <原文件名> <新文件名>。功能:文件改名,即将指定文件的名字改为“新文件名”。若原文件不存在,给出错误信息。若原文件存在,但正在使用,也不能改名,同样显示出错信息。应检查新文件名是否符合命名规则以及新文件名是否有重名冲突。 ren命令的处理函数为RenComd(),其简单流程图如图15所示。
开始 命令格式正确吗? 是 改名文件存在吗? 否 否 显示“命令中参数太多或太少” 显示“要改名的文件不存在。” 显示“文件正在使用不能改名。” 显示“新文件名不合规则。” 显示“存在文件新文件重名。” 是 文件已打开了吗? 否 是 新文件名合法吗? 是 新文件名重名吗? 否 否 是 在该文件的目录项中用新名字代替原名字 返回 图15 ren命令程序流程图
14. attrib命令流程图
命令形式:attrib <文件名> [±<文件属性>]。功能:显示、修改文件或目录属性。若命令中无“文件属性”参数,则显示指定文件的属性;若命令中有“文件属性”参数,则修改指定文件的属性。“文件属性”的形式有“+r或+h或+s”和“-r或-h或-s”两种形式,前者为设置指定文件为“只读”或“隐藏”或“系统”属性,后者为去掉指定文件的“只读”或“隐藏”或“系统”属性。各属性可组合使用且顺序不限。例如: attrib user/boy +r +h
上述命令的功能是设置当前目录下user子目录中的文件boy为只读、隐藏文件。又如 attrib /usr/user/box -h -r -s
上述命令的功能是取消根目录下usr子目录中user子目录中的box文件的“隐藏”、“只读”、“系统”属性。
当命令中指定的文件已打开或不存在,不能修改其属性,给出错误信息;当命令中提供的参数错误,也显示出错信息。
【注】本程序没有考虑属性的相关性和制约性。例如,DOS操作系统中,设置一个文件的“系统”属性时,必须先将该文件的属性设置成“只读”和“隐藏”后,才能设置它为“系统属性”,即设置属性有次序问题。本系统不受这些限制。
attrib命令的处理函数为AttribComd(),其简单流程图如图16所示。
14
《操作系统实验》指导书
开始 命令格式正确吗? 是 文件/目录存在吗? 否 否 显示“命令中参数太多或太少” 显示“文件或目录不存在。” 显示指定文件或目录的属性。 是 是 命令没有属性吗? 否 否 命令指定的是文件? 是 该文件打开了吗? 否 所给属性正确吗? 是 否 显示“命令中的属性参数错误。” 是 显示“文件正在使用,不能修改属性。” 按命令的属性给指定文件或目录设置属性 返回 图16 attrib命令程序流程图
15. undel命令程序流程图
命令形式:undel [<目录名>]。功能:恢复指定目录中被删除的文件。
指定目录不存在,报错;命令中不指定目录,则对当前目录进行操作。若目录中无删除的文件,则显示“无文件可恢复”;若目录中有被删除的文件,逐个显示并询问用户,得到肯定回答后则开始恢复之,恢复过程中若发现该文件原先占用的盘块已作它用,则显示“不能恢复”信息;若发现恢复文件与现有文件重名,则请求用户输入一个新名字(也要检查是否发生重名冲突)。恢复成功与失败的文件在udtab中对应的表项都将被删除。 【说明】udtab的表项是在删除文件时填写的。
undel命令的处理函数为UndelComd(),其简单流程图如图17所示。 16. FindPath( )函数程序流程图
函数原型:int FindPath(char *pp,char attrib,int ffcb,FCB* &fcbp);
功能:查找给定的路径(由参数pp指定),确定路径的正确性,并返回路径中最后一个名字(目录名)代表的目录的地址(首块号);对路径进行处理(去掉路径中的“..”),构成一个全路径名存于全局变量temppath中;当函数参数ffcb非零时,通过调用FindFCB( )函数,使得本函数成功返回时,FCB类引用参数fcbp带回指向路径最后一个目录的目录项的地址。其程序流程图如图18所示。 17. FindFCB( )函数程序流程图
函数原型:int FindFCB(char *Name,int s,char attrib,FCB* &fcbp);
功能:从函数参数s指定的块开始,查找参数Name指定的名字(目录或文件名)且符合属性attrib的目录项。若找到,返回其首块号(非负整数——Name是目录名时,返回正整数;Name是文件名时,返回非负整数:非空文件,返回正整数,空文件,返回0);若没有找到,
15
《操作系统实验》指导书
返回负数-1。函数正确返回时,引用参数fcbp带回该目录项的地址。 FindFCB()函数的程序流程图如图19所示。
开始 命令格式正确吗? 是 是 命令无参数吗? 否 显示“命令中参数太多” 处理当前目录中文件恢复问题。 否 指定目录存在吗? 是 处理指定目录中文件恢复问题。 否 显示“命令中指定路径错误。” 在要处理的目录中查找被删除的目录项,找到后询问用户是否恢复,得到肯定回答后恢复它。恢复过程中若发现该文件原先占用盘块已作它用,则显示“不能恢复”字样;若恢复文件存在重名冲突,则请求用户输入一个文件名,系统检查无重名冲突后,即执行恢复工作。然后处理下一个被删除文件,直到全部处理完毕为止。 显示恢复文件个数。 返回 图17 undel命令程序流程图
开始 pp=\? 说明:进入函数时pp指向路径名字符串 是 Temppath=\返回首块号s=1 s=curpath.fblock temppath←curpath.cpath s=1 pp++ 否 是 *pp=\? 否 将pp所指路经的各项分离出来(去掉\,存于paths[j](j=0,...,n)中。 逐个处理paths[j],将它们加到Temppath中,遇到某个paths[j]=\,则去掉临时路经Temppath中最后一个名字。对每一个paths[j],调用FindFCB()函数,以确定其存在性,若存在,返回其首块号s 最终,s=Temppath中最后一个名字的首块号 返回 图18 FindPath()函数流程图
16
《操作系统实验》指导书
开始 说明:进入函数时Name指向需查找的名字, s=该名字所在子目录的首块号 否 s > 0? 是 取下一个块号 s=FAT[s] 否 在块s中查找名字为Name,属性为attrib的目录项 返回-1 找到了吗? 是 属性符合吗? 否 返回-1 是 返回该目录项的首块号s,并由引用参数带回指向该目录项的指针值(地址)。 结束 图19 FindFCB( )函数流程图
开始 说明:进入函数时path指向需处理的路经名 将path中最后一个名字保存到Name中 path中去掉Name后,余下部分仍存于path 是 s=curpath.fblock temppath←curpath.cpath s=1(是根目录) temppath←\path是空串? 否 是 path=\? 否 调用函数:s=FindPath(path , ...) 是 显示“路径名错误” s=-1 s < 0? 返回 s 结束 图20 ProcessPath( )函数流程图
18. ProcessPath( )函数程序流程图
函数原型:int ProcessPath(char* path,char* &Name,int k,int n,char attrib); 功能:将参数path中最后一个名字(文件名或目录名)分离出来,并由引用参数Name带回;返回path中除掉Name后,最后一个目录的地址(首块号);必要时调用函数FindPath(),并通过全局变量temppath带回path(去掉Name后)的全路径名(绝对路径名)。 ProcessPath()函数的程序流程图如图20所示。
17
《操作系统实验》指导书
四、实验任务
以下实验任务中,每个学生可在4.1~4.8中任选4项任务。4.9~4.17为“选做内容”,能力较强的学生可在完成上述必做题目基础上,选择几项“选做”任务并努力完成之。4.1~4.17中的各项功能,在“OS实验.exe”程序都已实现,同学们可运行该程序,观察各项功能的执行情况。
4.1 修改md命令
修改md命令,增加“属性”参数,用于创建指定属性的子目录。命令形式如下:
md <目录名>[ <属性>]
属性包括R、H、S以及它们的组合(不区分大小写,顺序也不限)。例如: md user rh
其功能是在当前目录中创建具有“只读”和“隐藏”属性的子目录user。
4.2 修改Help命令或命令行预处理程序
对下面两项任务,每个学生可任选其中一项。 1. 修改help命令的显示方式和显示内容
修改HelpComd()函数,使之提供菜单式的较详细的帮助信息。例如可以先用菜单形式简单列出各命令名称,当用户选择某个命令的序号后,再比较详细地介绍该命令,包括命令的各种形式,每种形式的功能,以及某些举例说明等等。 2. 修改命令行预处理程序
修改命令行预处理函数ParseCommand( ),使以下命令行(命令与参数间无空格符)可以正确执行: cd/ cd.. dir/usr
copy/usr/boy mail ??
即命令名称与后边的“/”或“..”之间不需要空格也能正确执行。
【说明】参考程序已经可以处理类似于“cd/”的形式,但还不能处理“cd..”等形式。另外,若有输出重定向功能,“>”、“>>”也允许不是用空格分隔符(即允许与其它参数连用)。例如:type/usr/boy>>/test
4.3 新增fc命令,实现两个文件的比较
命令形式:fc <文件名1> <文件名2>
命令功能:逐个字节比较指定的两个文件,若相同,显示“文件内容相同”字样;若不同,显示第一个不同字节的位置和各自的内容。若文件不存在则报错。
4.4 新增replace命令,实现文件取代
命令形式:replace <文件名> <目录名>
命令功能:以“文件名”指定的文件,取代“目录名”指定目录中的同名文件。 请按以下要求设计replace命令的函数:
? 若指定文件或被取代文件不存在,则报错; ? 若被取代的是只读属性的文件时,应询问用户; ? 具有隐藏和系统属性的文件不能被取代;
18
《操作系统实验》指导书
? 若目录名参数缺省,则取代当前目录的同名文件;
? 文件名指定的文件和被取代的文件不应该是同一个文件,即不能自己取代自己。
4.5 新增move命令,实现文件“搬家”及子目录改名
命令形式:move <文件名> <目录名> 命令功能:将“文件名”指定的文件或目录,移动到“目标名”指定目录中(名字保持不变)。此命令也可改变子目录名。“文件名”指定被操作的文件或目录,可以是目录名;“目录名”指定“文件名”的新位置或子目录的新名字,即必须是目录名,不能是文件名。文件或子目录转移时不能改名。
? 若转移的是一个文件,且目录名指定的目录原来已经存在,则将该文件转移到指定目
录中;若指定目录中有同名文件,则询问是否覆盖,若同意则覆盖之。
? 若转移的是一个子目录,而“目录名”指定的子目录不存在,则move命令执行子目录
改名操作(必须是同一目录内);若指定目录存在,则将“文件名”指定的目录转移到该目录中,但若指定目录中存在与“文件名”指定的目录同名的子目录,则报错。 move命令的要点归纳如下: (1) 文件或目录,无重名时,可转移到目标目录中(只能同名转移,转移必定是不同目录的); (2) move命令可对子目录改名,但不能用于文件改名(改名操作必定是同目录进行的); (3) 转移时,文件可覆盖文件,目录也可覆盖文件;但文件或目录都不能覆盖目录。 应用举例:
① 将当前目录中的子目录lin,改名为chen,可输入如下命令: move lin chen
【注】前提是lin是当前目录中的一个子目录,而当前目录中无chen子目录和chen文件。 ② 将当前目录中的子目录lin,转移到子目录/bin中,可输入如下命令: move lin /bin
【注】前提是lin是当前目录中的一个子目录,而根目录中已存在子目录bin,且/bin中无名字为lin的子目录。此命令可覆盖子目录/bin中的名字为lin的文件(要询问用户)。 ③ 将目录/usr中的文件boy,转移到当前目录下的bin子目录中,可以输入如下命令: move /usr/boy bin
【注】前提是boy是目录/usr中的一个文件,而当前目录中已存在子目录bin,且bin中无名字为boy子目录。若bin目录中已存在文件boy,则询问用户是否覆盖。 【说明】新增move命令和新增batch命令两项工作可任选其一。
4.6 新增batch命令,实现批处理
(注:设计此命令与设计move命令命令两项工作可任选其一) 命令形式:batch batchfile
命令功能:从磁盘文件batchfile逐行读入命令行执行,直到batchfile中所有命令行都执行完毕为止。
batchfile是一个预先编好的文本文件,其内容是多条可执行命令。例如,预先编好文本文件test.txt,其内容为: cd /usr dir
type boy
copy boy user/box
则执行命令batch test.txt,系统将依次自动执行cd /usr、dir、type boy和copy boy user/box四条命令,跟你用键盘依次输入上述四条命令的执行过程和执行效果完全相同。
【注】(1) 文本文件可以在“记事本”或MSDEV或其他任何文本编辑环境中编写。利用此命
19
《操作系统实验》指导书
令,可以改写(简化)目录初始化程序,建立如图1所示的初始目录结构。
(2) 功能较完整的演示程序“OS实验.exe”,除了从真正的磁盘文件读入并执行批处
理命令外,batch命令还提供了如下形式(带一个参数“s”): batch filename s
该命令从模拟盘Disk[][]中读入批处理文件,并逐条执行命令,例如,模拟盘根目录中有文件test,其内容如下: dir
type map cd usr dir
open /boy cd user/ma type qil_nanj cd / uof
close boy
则在当前目录为根目录时,键入命令:
C:/>batch test s (下划线部分为键入内容) 系统执行过程如下: C:/>dir
The Directory of C:/
bin
auto 0 dev
boy 170 abc_map 203 map 76 test 77 5 file(s) 526 bytes 3 dir(s) 313856 free
C:/>type map A A A A A A A A A A A A A A A A
C:/>cd usr
20
《操作系统实验》指导书
C:/usr>dir
The Directory of C:/usr
..
boy 270 cat 171 dirfile 279 dir0 281
4 file(s) 1001 bytes 4 dir(s) 313856 free
C:/usr>open /boy
文件/boy打开成功。
C:/usr>cd user/ma
C:/usr/user/ma>type qil_nanj
七律 人民解放军占领南京 1949.04
钟山风雨起苍黄,百万雄师过大江。 虎踞龙盘今胜昔,天翻地覆慨而慷。 宜将胜勇追穷寇,不可沽名学霸王。 天若有情天亦老,人间正道是沧桑。
C:/usr/user/ma>cd / C:/>uof
打开文件表UOF的内容如下:
文件名 文件属性 首块号 文件长度 状态/boy 普通 40 170 打开 1 171
C:/>close boy
关闭文件/boy成功。
从上可见,其执行过程与直接键入命令完全相同。
4.7 修改close、type等命令,允许不带文件名参数
修改close、type等命令,使其可以使用如下命令形式: (1) close命令改成可用如下形式: close <文件名>——关闭指定文件
close——关闭当前操作文件(新增形式)
21
读指针 写指针
《操作系统实验》指导书
(2) type命令改成可用如下形式:
type <文件名>——显示指定文件内容
type——显示当前操作文件内容(新增形式)
所谓“当前操作文件”,是指上一次使用create、open、write、read、rewind或fseek等命令操作过的文件。
另外,fseek、rewind、block等非正规操作系统命令也可增加没有文件名的命令形式。如修改fseek命令后,使它可用如下2种命令形式:
fseek <文件名> |p
fseek |p
4.8 完善copy命令
1. 改正某些缺陷
目前参考程序中的copy命令不能处理如下情况:假设当前目录是/usr,执行如下命令之一 copy boy / copy boy ..
上述2条命令应该是将当前目录/usr中的文件boy复制到其父目录(根目录)中,文件名仍为boy。但系统不能正确执行,而显示“目标文件名错误”的信息。正确的功能应该是: ? 若当前目录中不存在文件boy,则报错;
? 第2个命令若当前目录是根目录,因根目录没有父目录,故应报错;
? 若当前目录的父目录中已经存在名为boy的文件,也报错(或询问用户是否覆盖)。 ? 其他情况上述命令都应能正确执行。
请按此要求修改copy命令处理程序,使之在上述命令形式也能正确执行。 2. 允许覆盖同名文件(选做内容)
参考程序中的copy命令,为了程序设计方便,当目标文件存在同名文件或同名子目录时,就停止执行复制操作。可模仿DOS操作系统,修改copy命令,使当目标文件存在同名文件时,询问用户是否覆盖,得到肯定回答时,即使该同名文件是只读文件,也仍然复制(覆盖原先文件,即与目标文件同名的文件被删除)。例如,当执行命令:copy boy /usr/test时,若子目录/usr中已存在文件test,则询问是否覆盖;若test是子目录名,则将文件boy复制到子目录/usr/test下,文件名与源文件相同,即boy。但是如果/usr/test/boy仍为子目录,则显示错误信息,停止执行copy命令。
4.9 增加输出重定向功能(选做内容)
某些命令执行结果在屏幕显示,可以使其输出结果保存到某个文件中(屏幕不再显示),这就是所谓的“输出重定向”功能。例如,可以修改如下命令,使之具有输出重定向功能(输出重定向用符号“>”或“>>”表示): 1. type命令的输出重定向形式
命令形式1:type <文件名1> > <文件名2>
命令功能:将原先应该显示的“文件名1”指定的文件内容,保存到“文件名2”指定的文件中。文件名2指定文件的原先内容被删除。这相当于复制文件。 命令形式2:type <文件名1> >> <文件名2>
命令功能:将原先应该显示的“文件名1”指定的文件内容,保存到“文件名2”指定的文件中。文件名2指定文件的原先内容不删除,新内容接到原先内容尾部。这相当于合并复制文件。
22
《操作系统实验》指导书
type命令增加了输出重定向功能后,共有3种命令形式(不考虑缺省文件名1的情况时)。 2. dir命令的输出重定向形式
命令形式1:dir [<目录名>] [|<属性符>] > <文件名> 命令功能:将原先应该显示的指定目录中指定属性的文件名和子目录名等内容,保存到文件名指定的文件中。文件名指定文件的原先内容被删除。 命令形式2:dir [<目录名>] [|<属性符>] >> <文件名> 命令功能:将原先应该显示的指定目录中指定属性的文件名和子目录名等内容,保存到文件名指定的文件中。文件名指定文件的原先内容不删除,新内容接到原先内容尾部。
具体地讲,dir命令在原有的4种形式的基础上,增加了输出重定向功能后,增加了8种新的命令形式(这样,dir共有12种命令形式),以下列出8种新的命令形式:
① dir > <文件名> ——将原先应该显示的当前目录中普通属性的文件及第一级子目录名保存到“文件名”指定的文件中。若指定文件已存在,则原内容删除。
② dir <目录名> > <文件名>——将原先应该显示的指定的目录中普通属性的文件及第一级子目录名保存到“文件名”指定的文件中。若指定文件已存在,则原内容删除。 ③ dir |<属性> > <文件名> ——将原先应该显示的当前目录中指定属性的文件及第一级子目录名保存到“文件名”指定的文件中。若指定文件已存在,则原内容删除。
④ dir <目录名> |<属性> > <文件名> ——将原先应该显示的“目录名”指定的目录中指定属性的文件及第一级子目录名保存到“文件名”指定的文件中。若指定文件已存在,则原内容删除。
⑤ dir >> <文件名> ——将原先应该显示的当前目录中普通属性的文件及第一级子目录名保存到“文件名”指定的文件中。若指定文件已存在,则新内容接到原内容的尾部。 ⑥ dir <目录名> >> <文件名> ——将原先应该显示的“目录名”指定的目录中普通属性的文件及第一级子目录名保存到“文件名”指定的文件中。若指定文件已存在,则新内容接到原内容的尾部。
⑦ dir |<属性> >> <文件名> ——将原先应该显示的当前目录中指定属性的文件及第一级子目录名保存到“文件名”指定的文件中。若指定文件已存在,则新内容接到原内容的尾部。
⑧ dir <目录名> |<属性> >> <文件名> ——将原先应该显示的“目录名”指定的目录中指定属性的文件及第一级子目录名保存到“文件名”指定的文件中。若指定文件已存在,则新内容接到原内容的尾部。 【建议】为方便编成,可以利用“字符串流”的方法,先将要显示的内容,保存到字符数组中,
然后再根据要求决定将该字符数组显示还是存盘。
4.10 修改del、copy等命令,使其可以使用统配符 *(选做内容)
修改某些命令,使其可以使用统配符“*”。例如: del * ——删除当前目录中的所有文件
attrib * ——显示当前目录中所有文件和子目录的属性
copy * <目标目录> ——将当前目录中的所有文件复制到目标目录中(同名复制)
4.11 修改copy命令,增加合并复制功能(选做内容)
命令形式:copy <文件名1>+<文件名2> [<文件名3>]
命令功能:文件1和文件2合并,复制到文件3中,其中文件2接到文件1的尾部(文件1、文件2不变)。若文件名3缺省,则目标文件与文件1同名。若文件1、文件2不存在,则报错。若文件3有重名冲突,则询问用户决定是否覆盖。应用举例(假设当前目录是/usr): (1) copy user/boy+test bin
23
《操作系统实验》指导书
上述命令将当前目录中的文件test,连接到当前目录中的user子目录中文件boy尾部,复制到当前目录的文件bin中,文件boy和test内容不变。
??若bin是目录名,则目标文件复制到bin子目录中,文件名为boy。若bin中已经存在文件
boy,则询问是否覆盖它;若bin中的boy仍是子目录,则报错;
??若当前目录中已经存在文件bin,则询问是否覆盖它;若/usr/user/boy或/usr/test不
?存在,则报错。 (2) copy user/boy+test
上述命令将当前目录中的文件test,连接到当前目录中的user子目录中文件boy尾部,复制到当前目录中,文件名为boy。
??若当前目录中已存在文件boy,则询问是否覆盖它;
??若当前目录中存在boy子目录,则目标文件复制到/usr/boy中,文件名为boy;
(3) copy boy+bin/test 该命令将当前目录中bin子目录中的文件test,连接到当前目录中的文件boy尾部,连接后的内容复制到当前目录的文件boy中(因要改变boy的内容,故在复制时要询问用户是否覆盖boy)。
4.12 修改程序,实现多磁盘文件系统(选做内容)
参考程序中只有一个磁盘(设定为C盘),修改程序,实现多磁盘系统(例如有C、D等磁盘)。多磁盘时,每个磁盘有一个FAT表,每个磁盘有一个当前目录,每个磁盘有一个根目录,整个系统有一个当前磁盘。这种系统应增加选择当前磁盘的命令,例如命令: D:
该命令的功能是:选择D盘作为当前盘。
另外,这种系统的路径名开头可有盘符。例如:D:/doc/test,代表D:盘根目录下doc子目录中的文件test。
【修改提示】假设磁盘个数为2。文件分配表FAT可改为二维数组FAT[2][K](磁盘块数为K);模拟磁盘可用三维数组Disk[2][K][SIZE](K为磁盘块数,SIZE为磁盘块容量,例如,K=1000,SIZE=256)。当前目录用结构类数组curpath[2]记录。增设全局变量d_no,用于记录当前磁盘号(其值为0,表示当前磁盘为C:盘,其值为1,表示表示当前磁盘为D:盘)。其他修改不再赘述,例如必须修改路径分析处理函数FindPath()和ProcessPath()等等。 【注】功能较全的程序“OS实验.exe”中有三个磁盘(C:、D:和E:)。
4.13 修改磁盘块容量(选做内容)
将磁盘块容量SIZE由64改为256字节(这需要对程序中跟此有关的部分作相应的改动),磁盘块容量增大为256后,可将删除文件恢复表udtab存储到磁盘中。为此,需修改UnDel的结构,例如,UnDel的结构可修改如下:
struct UnDel //恢复被删除文件的数据结构(共128字节) {
char gpath[112]; //被删除文件的全路径名(不含文件名) char ufname[FILENAME_LEN]; //被删除文件名 char ufattr; //被删除文件属性 short ufaddr; //被删除文件的首块号
short fb; //存储被删除文件长度及块号的指针(首块号) };
每个盘块可以存放2个udtab表的表项。为方便计,udtab表的长度仍可限定为40,可在磁盘中开辟一个大小为20个磁盘块的连续存储空间存放udtab表。udtab表存储在连续的磁盘空间的优点是:可用数组的方法直接处理Disk中的udtab表。退出系统时,无需将udtab表存盘,启动系统时,无需读入udtab表。udtab的块号链的首块号记录在Disk[0]中。
24
《操作系统实验》指导书
4.14 修改undel命令(选做内容)
可考虑3种修改方案,每个同学可任选其中一种修改方案。 1. 删除文件恢复表udtab不用数组存储,而直接存储在磁盘空间
此方案应修改UnDel的数据结构,以便udtab在磁盘中存储。例如可用如下结构: struct UnDel //恢复被删除文件表的数据结构 {
char ufname[FILENAME_LEN]; //被删除文件名 char fattr; //被删除文件的属性
short gpath;//它所指的盘块链存储被删除文件的全路径名(不含文件名) short fb; //它所指的盘块链存储被删除文件的块号(含文件的首块号) };
这样处理,可使每个盘块存储4个表项。这种修改方式处理思路与参考程序相同,但因结构类型UnDel改变了,故del和undel命令的处理函数都要做相应修改。另外,系统启动时,不再需要从文件UdTab2008.dat读入udtab表的数据,退出系统时,也不再需要将udtab表存入文件UdTab2008.dat。
上述UnDel结构中gpath所指的盘块链最多2个盘块(本系统中,去掉文件名后,路径名不超过115字节)。fb所指的盘块链的盘块数视文件占用的盘块数而定,因盘块容量为64B,每个盘块可存放32个块号,故文件占用块数不超过32时,fb所指盘块链只有1个盘块,其余类推。 2. 修改undel命令的执行方式并增强其功能
(1) 参考程序中的undel命令,只恢复指定目录中被删除的文件,并不处理指定目录以外被删除文件的恢复问题,使用不太方便。修改程序,使undel处理所有被删除文件,命令格式改为:undel,即命令中不带“目录名”参数,命令的处理过程是:逐个显示udtab表中记录的被删除文件的信息,询问用户是否恢复它,肯定回答时恢复之(恢复操作过程与原先相似),否则不恢复。
(2) 参考程序中,当被删除文件原先的目录项被它用后,即使被删除文件原先占用的盘块没有被占用,也不能再恢复该文件,这是因为UnDel结构中没有包括文件长度等信息,若UnDel结构中包含FCB的全部信息,就可以做到即使被删除文件原先的目录项被占用,仍可以恢复该文件,只要该文件的磁盘块没有被占用。请按此思路修改程序,提高对被删除文件的恢复能力。
为了实现(2)的功能,建议可采用如下措施:
? 修改磁盘块容量为256字节; ? UnDel结构为:
struct UnDel //恢复被删除文件的数据结构(共128字节) {
char gpath[112]; //被删除文件的全路径名(不含文件名) char ufname[FILENAME_LEN]; //被删除文件名 char ufattr; //被删除文件属性 short ufaddr; //被删除文件的首块号
short fb; //存储被删除文件长度及块号的指针(首块号) };
其中fb所指盘块中第一个值为文件长度值。每个盘块可存储2个表项。
? udtab的表项数仍假定为40,在磁盘中开辟一个有20个盘块的连续空间,用来存储
udtab表。设这20个盘块的连续空间的首块号为b1,则udatb表可定义如下: UnDel *udtab=(UnDel*) Disk[b0];
25
《操作系统实验》指导书
这样,udtab实际上仍然是一个数组,对udtab表的操作,与参考程序一样(只是其表项的结构有所不同)。退出系统时,不再需要将udtab单独存盘,只需将模拟磁盘Disk[K][SIZE]存盘即可。 ? 修改undel等有关程序。 3. 采用类似于Windows的回收站方案
参考程序实现undel命令的思路是:删除文件将释放磁盘空间,但将它的有关目录项信息以及它占用的盘块号存储到udtab表中,恢复文件时,根据udtab表中文件原先占用的盘块号信息,恢复该文件。这是DOS等操作系统采用的方法。请修改undel的实施方案,采用类似于Windows的回收站方案,实现被删除文件恢复功能。回收站方案的基本思路是:被删除文件占用的磁盘空间并不释放,不过将它从它所在目录,“搬到”一个特殊文件夹——回收站中,当需要恢复它时,再将它从回收站“搬回”它原先所在目录。真不需要该文件时,将它从回收站清除(这时才真正释放磁盘空间)。解决方案之一是:在根目录中建立一个特殊的文件夹recycled (其属性为:只读、隐藏、系统),称recycled为回收站,其表项的数据结构仍采用前面介绍的FCB结构,但其中的成员变量Fsize,不用来存储文件长度,而用来存储一个盘块号,该盘块中存储被删除文件长度和文件的全路径名(不含文件名),这里的“全路径名”就是文件的原位置,还原文件时该信息是不可或缺的。 dir等命令处理recycled文件夹时,与普通文件夹略有不同(因其文件长度等信息要从Fsize号盘块中取出,不能直接获得)。rd命令应修改成不能删除文件夹recycled,copy, move, replace等命令也改成不能对文件夹recycled操作。功能较完整的程序“OS实验.exe”中可以演示udtab表恢复被删除文件,也可演示利用“回收站”还原被删除文件。
【注】采用回收站方案的系统,磁盘块容量应≥128字节,否则一个盘块可能存放不下文件
长度和文件的全路径名。程序“OS实验.exe”中的盘块容量是256字节,该程序实现了“回收站”功能。
4.15 修改read命令,允许不带文件名参数(选做内容)
修改read命令处理函数ReadComd(),使其可以使用如下命令形式:
(1) read——读当前操作文件,从读指针位置开始读到文件尾部(新增形式) (2) read <文件名>——读指定文件,从读指针位置开始读到文件尾部 (3) read <文件名> |pm——读指定文件,从指定位置m开始读到文件尾部 (4) read <文件名> |ln——读指定文件,从读指针位置开始读n个字节 (5) read <文件名> |pm |ln——读指定文件,从指定位置m开始读n个字节
(6) read |pm |ln——读当前操作文件,从指定位置m开始读n个字节(新增形式) (7) read |pm——读当前操作文件,从指定位置m开始读到文件尾部(新增形式) (8) read |ln——读当前操作文件,从读指针位置开始读n个字节(新增形式)
上述命令中,“|p”表示“位置”,“m”表示某个整数。“|L”表示“长度”,“n”也代表某个整数。(下同)
4.16 修改write命令,允许不带“文件名”参数(选做内容)
修改write命令处理函数WriteComd(),允许其命令中不带“文件名”参数。这样,除了参考程序中提供的以下5种命令形式:
write <文件名> ——在写指针当前所指位置写,写入内容代替原内容(改写方式) write <文件名> |pn——在文件开头第n个字节处写,改写方式
write <文件名> |ins——在写指针所指位置写,写入处开始的原内容后移(插入方式) write <文件名> |pn |ins——在文件开头第n个字节处写,插入方式 write <文件名> |app——在文件尾部写(添加方式)
26
《操作系统实验》指导书
又新增加如下5种不带文件名的命令形式:
write——在写指针当前所指位置写,写入内容代替原内容(代替方式或改写方式) write |pn——在文件开头第n个字节处写,改写方式
write |ins——在写指针所指位置写,写入处开始的原内容后移(插入方式) write |pn |ins——在文件开头第n个字节处写,插入方式 write |app——在文件尾部写(添加方式)
【思考】如何修改程序,使参数“insert”、“append”只要前3个字符对就可以,但多于3个
字符也行。例如:对于“insert”,输入ins、inse、inser、insert(不区分大小写)都可以,输入其它不行。
4.17 修改write命令,增加“删除”方式(选做内容)
除了插入、改写方式外,在3的基础上,还可以考虑增加“删除”方式,这样,又可增加如下命令形式:
write <文件名> |del——对指定文件,从写指针位置删除到文件末尾 write |del——对“当前操作文件”,从写指针位置删除到文件末尾
write <文件名> |lm |del——对指定文件,从写指针位置开始,删除m个字节 write |lm |del——对“当前操作文件”,从写指针位置开始,删除m个字节 write <文件名> |pn |del——对指定文件,从指定位置n处开始删除到文件末尾 write |pn |del——对“当前操作文件”,从指定位置n处开始删除到文件末尾 write <文件名> |pn |lm |del——对指定文件,从指定位置n处开始删除m个字节 write |pn |lm |del——对“当前操作文件”,从指定位置n处开始删除m个字节
【注】没有完成4.16的工作,也可以在write命令中增加“删除”功能,不过上述8条有关
write删除功能的命令,只有4条带文件名参数的命令可以使用。
五、模拟文件管理系统中操作命令使用说明
为使学生对模拟文件管理系统中的操作命令有一个比较清楚的总体了解,下面对本系统的各命令作较详细的介绍。命令中“[ ]”中为可选项。命令使用举例中,假定目录结构如图1所示,同时假定当前目录为user。 1. attrib命令
命令格式:attrib <文件名> [<属性>]
命令功能:设置或显示指定文件或目录的属性。属性参数缺省,则显示属性。若指定文件或目录不存在则报错。此命令对目录名同样适用。
参数“属性”的表达形式为“+/-属性符,属性符有R、H和S,分别表示“只读”、“隐藏”和“系统”属性,它们可以组合使用,且顺序不限。其中“+”表示增加指定的属性,“-”表示去掉指定的属性。 使用举例: attrib boy
上述命令显示当前目录中文件boy的属性,若文件boy不存在,则报错。 attrib ../mail
上述命令显示当前目录的父目录(即usr目录)中mail文件的属性。 attrib lin/box +r +h
上述命令将当前目录中lin子目录内box(文件或目录)的属性设置成只读且隐藏。 attrib boy -h
上述命令去掉当前目录中文件boy的“隐藏”属性。
27
《操作系统实验》指导书
2. block命令
命令格式:block <文件名>
命令功能:显示文件或目录占用的磁盘块号。若指定文件或目录不存在则报错。 实际操作系统不提供这样的命令,本系统是为了修改调试程序方便而增加了此命令。 使用举例: block ..
上述命令显示当前目录的父目录(即usr目录)占用的盘块号。 block /auto
显示根目录中文件auto占用的盘块号。 3. cd命令
命令格式:cd [<目录名>]
命令功能:改变或显示当前目录。若指定目录不存在则报错。 使用举例: cd
显示当前目录(它的全路径名)。 cd ..
选择当前目录的父目录作为当前目录。例如,若命令执行前的当前目录是user,则执行此命令后,当前目录变为usr。若当前目录是根目录,则执行上述命令时将报错(因为根目录没有父目录)。
cd /bin (绝对路径) 选择根目录中的bin子目录作为当前目录。 cd user/lin (相对路径)
选择当前目录的user子目录中的lin子目录作为当前目录。 4. check命令
命令形式:check
命令功能:检查FAT表等
实际操作系统无这类命令,该命令是为了方便调试、修改程序而设计的。该命令无参数。 5. close命令
命令格式:close <文件名> 命令功能:关闭指定文件。 使用举例: close mail
关闭当前目录中的文件mail,若当前目录中无此文件,或者虽然有此文件,但它并没有打开,则报错。应用举例: close ../box
关闭当前目录的父目录中的文件box。 close sun/beta.txt
关闭当前目录的sun子目录中的文件beta.txt。 6. copy命令
命令形式:copy <源文件名> [<目标文件名>]
命令功能:将源文件名所指文件复制出新文件,新文件名由“目标文件名”指定。 使用举例:
① 同一目录中的更名复制 copy mail email
将当前目录中的文件mail,复制出文件email,文件email也在当前目录中。
28
《操作系统实验》指导书
? 若执行命令时当前目录中不存在email(目录或文件),则该命令将文件mail,复制成当
前目录下的文件email;
? 若当前目录下存在email,但email是子目录名,则将当前目录中的文件mail,复制到当
前目录中的email子目录内,文件名为mail(同名复制);此时若email目录内已经存在文件或目录mail,则报错(重名错误);
? 若当前目录内存在email文件,则报错(重名错误);
? 若当前目录内不存在源文件mail(或者虽然有mail,但它是子目录名),则也报错。 ② 不同目录的同名复制 copy /mail user/lin
将根目录中的文件mail,复制到当前目录的user子目录的lin子目录中,文件名仍为mail。 ? 若user子目录中无lin子目录,则将mail复制到user子目录内,文件名为lin。 ? 若源文件或指定目录不存在,都将报错。
③ 同名复制到当前目录(此时,命令只需一个参数——源文件名) copy /usr/boy
将根目录的usr子目录中的文件boy,复制到当前目录中,文件名仍为boy。 ? 若文件boy不存在,报错。
? 若当前目录是/usr,也报错(同一目录不能同名复制)。 7. create命令
命令形式:create <文件名> [<属性符>]
命令功能:创建给定属性的新文件。刚创建的文件处于特殊的“打开”状态,即“建立”状态。处于这种状态的“只读”文件,也可以写文件。 使用举例:
create /usr/user/lin/box
在目录/usr/user/lin中创建文件box,该文件是“普通”属性的文件,即它的属性既不是“只读”、也不是“隐藏”、也不是“系统”。 create alpha rh
在当前目录中创建文件alpha,它是“只读”、“隐藏”属性的文件。 【注】新创建的文件也不允许发生重名冲突。 8. del命令
命令形式:del <文件名>
命令功能:删除指定文件。删除文件时,将该文件的目录项中“文件名”的首字符改为ASCII码为0xe5的字符,同时回收该文件的磁盘空间(FAT表对应值清零)。若系统具备删除恢复功能,则需将被删除文件的有关信息记录到“删除文件恢复信息表”中。 使用举例:
del user/lin/box
删除当前目录的user/lin子目录中的文件box。 9. dir命令
命令形式:dir <目录名> [<属性>]
命令功能:显示“目录名”指定的目录中的文件名和第一级子目录名。若指定目录不存在,则给出错误信息。如果命令中没有指定目录名,则显示当前目录下的相应内容。若命令中无“属性”参数,则显示指定目录中“非隐藏”属性的全部文件名和第一级子目录名;若命令中有“属性”参数,则仅显示指定属性的文件名和目录名。属性参数的形式是“|属性符号”,其中属性符号有r、h和s三种(不区分大小写),分别表示“只读”、“隐藏”和“系统”三种属性,它们可以组合使用且次序不限。例如“|rh”,表示要求显示同时具有“只读”和“隐藏”属性的文件和目录名。显示文件名时,同时显示该文件长度;显示目录名时,同
29
《操作系统实验》指导书
时显示“
dir /usr |h 显示根目录下usr子目录中全部“隐藏”属性的文件名和子目录名 dir .. 显示当前目录的父目录中全部“非隐藏”属性的文件和子目录名(包括“只
读”属性的文件和目录名也显示)。
10. exit命令
命令形式:exit
命令功能:退出本程序。退出时询问用户是否要保存数据。 11. fseek命令
命令形式:fseek <文件名>
命令功能:将读、写指针移到指定位置n处。 使用举例:
fseek boy 20
对当前目录中的文件boy进行操作:将其读、写指针移到文件开头的第20个字符处。文件boy必须存在且已经打开,否则报错。
高级语言中有这样功能的函数,但实际操作系统中不提供fseek和rewind这样的命令,本系统是为了方便读、写文件操作而提供这类命令的。 12. help命令
命令形式:help
命令功能:简单列出本系统各操作命令的格式和功能。 13. md命令
命令形式:md <目录名> 命令功能:创建指定目录。 使用举例:
md /usr/user/chen
在根目录的usr子目录的user子目录内,创建新目录chen。 14. open命令
命令形式:open <文件名>
命令功能:打开指定文件。在用户打开文件表(UOF)中登记该文件的有关信息。 ? 若指定文件不存在,报错;
? 若指定文件已经打开,则显示“文件原先已经打开”字样。 15. rd命令
命令形式:rd <目录名>
命令功能:删除指定的目录。规定只能删除空目录。
本模拟系统规定,rd命令只能删除空子目录(即只含有一个目录项“..”的目录)。对非空子目录执行rd命令时,必须先用del命令删除其中的所有文件、用rd命令删除其中所有子目录后,方能删除该目录。这种方式与DOS的处理方式相同,而与Windows的处理方式不同。这种处理方式的优点是安全,缺点是删除工作烦琐。 16. read命令
命令形式:read <文件名> [<位置m> [<字节数n>]
命令功能:从已打开的文件读文件内容并显示。若无“位置”参数,则从读指针所指位置开始读。若有\位置\参数,则从指定位置处开始读。位置m是指从文件开头第m个字节处读(m从1开始编号)。若无\字节数\参数,则从指定位置读到文件末尾;若有\字节数n\参数,则从指定位置开始读n个字节。每读一个字节,读指针后移一个字节。若文件未打开或文件不存在,分别给出错误信息。
30
《操作系统实验》指导书
使用举例: read boy
上述命令读当前目录中的文件boy,从读指针所指位置开始,一直读到文件尾部。 read boy 20
上述命令读当前目录中的文件boy,从文件的第20个字节开始读,一直读到文件尾部。 read boy 20 30
上述命令读当前目录中的文件boy,从文件的第20个字节开始,共读30个字节。 17. ren命令
命令形式:ren <旧文件名> <新文件名> 命令功能:文件改名。 使用举例:
ren /usr/boy peter
上述命令将根目录下usr子目录中的文件boy,改名为peter。 ? 若boy不存在,报错。
? 若名字为peter的文件已经存在,报错。
注意!此命令新文件名前不能有目录名,否则出错。 18. rewind命令
命令形式:rewind <文件名>
命令功能:将指定文件的读、写指针移到文件开头(第一个字节处)。 ? 若该文件不存,报错。
? 若文件虽存在但没有打开,也报错。 19. type命令
命令形式:type <文件名>
命令功能:显示指定文件的内容。 使用举例:
type /usr/boy 20. undel命令
命令形式:undel <目录名>
命令功能:恢复指定目录中被删除的文件。 使用举例:
设当前目录是根目录,键入undel,操作过程及屏幕显示如下: C:/>undel
文件abc可能可以恢复,是否恢复它?(y/n) y 文件abc可能可以恢复,是否恢复它?(y/n) y
该目录中已经存在名为abc的文件,请为被恢复文件输入一个新的名字:boy 输入的文件名发生重名冲突。 请重新输入文件名:abc1
共恢复了 2 个被删除的文件。
因根目录中先后删除的2个文件名都是abc,故恢复时有2个abc文件,发生重名冲突,请求用户输入一个新名字,开始时用户输入boy,因根目录中正好也有文件boy,故还是发生重名冲突,直到输入abc1,才完成第2个文件的恢复工作。 当要恢复的文件原先占用的磁盘空间已作它用时,该文件就不能恢复。本例没有发生这种情况。 21. uof命令
命令形式:uof
31
《操作系统实验》指导书
命令功能:显示用户已打开文件表的内容。
实际操作系统并不提供这类命令,本系统是为了方便程序调试而提供了此命令。 22. write命令
命令形式:write <文件名> [<位置>] [insert]
命令功能:命令中若无“位置”参数,则在写指针所指位置写入文件内容;若提供“位置”参数,则在对应位置写入内容。位置可以是整数n,是指在文件的第n个字节处开始写入(位置从1开始编号)。“位置” 还可以是“append”(前3个字符有效,不区分大小写),表示在文件尾部写入信息;若有参数“insert”(前3个字符有效,不区分大小写),则新写入的内容插入到对应位置,对应位置开始的原内容后移。若无参数“insert” ,写入的内容代替文件原先的内容(对应位置的内容)。写入完毕调整文件长度和写指针值(写指针指向写入内容最后一个字节的下一个字节处)。若文件未打开或文件不存在,分别给出错误信息。 可以有如下几种命令形式:
write <文件名> ——在写指针当前所指位置写,写入内容代替原内容(改写方式)。 write <文件名>
write <文件名> insert——在写指针所指位置写,写入处开始的原内容后移(插入方式)。 write <文件名>
write <文件名> append——在文件尾部写(添加方式),这种情况参数“ins”不起作用。 使用举例: write boy
对当前目录的文件boy执行写操作,从文件boy的写指针当前所指位置开始写,写入内容代替原内容(改写方式)。
? 若文件boy不存在,报错。
? 若文件boy存在,但没有打开,也报错。
? 若文件boy存在,且已经打开,但该文件是只读文件,也报错。 write user/beta 20
对当前目录的user子目录的文件beta执行写操作,在文件开头第20个字节处开始写,写入内容代替原内容(改写方式)。 write boy ins
对当前目录的文件boy执行写操作,从文件boy的写指针当前所指位置开始写,写入处开始的原内容后移(插入方式)。 write boy 20 ins
对当前目录的文件boy执行写操作,在文件开头第20个字节处开始写,写入处开始的原内容后移(插入方式)。 write boy app
对当前目录的文件boy执行写操作,写入的内容接到文件boy的尾部(添加方式)。
32
《操作系统实验》指导书
六、学生应提交的实验材料
完成实验时,每个学生至少应提交如下三种材料:
6.1 《实验报告》
实验报告要求:
(1) 用钢笔或签字笔填写,不能用圆珠笔和铅笔填写。可以用打印稿。 (2) 应说明自己完成实习任务的情况,包括: ? 新设计了哪些命令处理函数; ? 修改了哪几部分程序;
? 哪些是自己独立完成的,哪些是与人合作完成的。
(3) 对新增命令和重新设计的命令的程序,应提供较详细的程序流程图。注意!实验报告
中不要画本《实验指导书》已经给出的流程图。
(4) 应包含测试、运行程序的主要结果。所提供的测试结果,应能体现学生新增命令程序和
修改量比较大的程序的功能,能体现学生测试程序的能力(测试用例应尽可能测试到各被测试命令的相关功能)。
(5) 可以包含新增命令的设计思想或操作使用说明。
6.2 源程序清单及其可执行文件
(1) 源程序清单中修改和新增部分要求有尽可能详细的注释。 (2) 可执行文件(.exe文件)应该能在Windows环境中独立执行。
6.3 程序测试、运行的结果
应该把程序修改、调试好后的最终运行结果,即屏幕显示内容,用文本文件(.txt)或Word文档形式保存下来提交给批阅老师,以便了解修改、新增功能的实现情况。
【注】可将运行的屏幕显示内容复制到“剪贴板”中,粘贴到“记事本”或Word窗口中,然后保存到磁盘文件中。屏幕显示内容复制到“剪贴板”的方法是:鼠标右键单击运行窗口的“标题栏”,在弹出菜单中选“编辑/全选”,按“回车”键即可。
第一项(实验报告)以纸质文件方式交任课老师,后两项以电子文档形式打包上传到10.3.8.26服务器中“通信08操作系统”文件夹中。
为避免文件重名,同时为了清楚明了,要求每个学生用自己的学号给文件命名。例如,某学生的学号为“通信080104”,则其源程序文件名为“通信080104.cpp”,可执行文件名为通信
080104.exe\,程序测试、运行结果的文件名为“通信080104.txt”或“通信080104.doc”,上述文件可以压缩成一个文件,文件名为“通信080104.rar”或“通信080104.zip”等。
南京工业大学信息学院计算机科学与技术系编
33
《操作系统实验》指导书
六、学生应提交的实验材料
完成实验时,每个学生至少应提交如下三种材料:
6.1 《实验报告》
实验报告要求:
(1) 用钢笔或签字笔填写,不能用圆珠笔和铅笔填写。可以用打印稿。 (2) 应说明自己完成实习任务的情况,包括: ? 新设计了哪些命令处理函数; ? 修改了哪几部分程序;
? 哪些是自己独立完成的,哪些是与人合作完成的。
(3) 对新增命令和重新设计的命令的程序,应提供较详细的程序流程图。注意!实验报告
中不要画本《实验指导书》已经给出的流程图。
(4) 应包含测试、运行程序的主要结果。所提供的测试结果,应能体现学生新增命令程序和
修改量比较大的程序的功能,能体现学生测试程序的能力(测试用例应尽可能测试到各被测试命令的相关功能)。
(5) 可以包含新增命令的设计思想或操作使用说明。
6.2 源程序清单及其可执行文件
(1) 源程序清单中修改和新增部分要求有尽可能详细的注释。 (2) 可执行文件(.exe文件)应该能在Windows环境中独立执行。
6.3 程序测试、运行的结果
应该把程序修改、调试好后的最终运行结果,即屏幕显示内容,用文本文件(.txt)或Word文档形式保存下来提交给批阅老师,以便了解修改、新增功能的实现情况。
【注】可将运行的屏幕显示内容复制到“剪贴板”中,粘贴到“记事本”或Word窗口中,然后保存到磁盘文件中。屏幕显示内容复制到“剪贴板”的方法是:鼠标右键单击运行窗口的“标题栏”,在弹出菜单中选“编辑/全选”,按“回车”键即可。
第一项(实验报告)以纸质文件方式交任课老师,后两项以电子文档形式打包上传到10.3.8.26服务器中“通信08操作系统”文件夹中。
为避免文件重名,同时为了清楚明了,要求每个学生用自己的学号给文件命名。例如,某学生的学号为“通信080104”,则其源程序文件名为“通信080104.cpp”,可执行文件名为通信
080104.exe\,程序测试、运行结果的文件名为“通信080104.txt”或“通信080104.doc”,上述文件可以压缩成一个文件,文件名为“通信080104.rar”或“通信080104.zip”等。
南京工业大学信息学院计算机科学与技术系编
33
正在阅读:
操作系统原理实验指导书01-23
小游戏天下02-10
一次受委屈作文600字06-20
2018学年高中物理人教版必修2习题:第七章 机械能守恒定律 第9节06-20
2011西藏自治区公务员考试公共基础知识最新考试试题库12-24
家乡的小森林作文400字07-05
党性修养个人学习心得体会,党性个人学习心得体会【6篇】07-31
母亲我爱您作文350字07-15
请相信理想的力量作文600字07-14
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 指导书
- 原理
- 操作系统
- 实验