《操作系统实验》指导书
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