中北大学
操作系统课程设计
说 明 书
学 院、系: 专 业: 学 生 姓 名:
赵巍
软件学院 软件工程
学 号: 0921010414
设 计 题 目: 基于Linux的模拟文件系统的设计与实现
起 迄 日 期: 2011年12月22日- 2012年1月7日 指 导 教 师:
康珺
2012 年 1月 7 日
1 需求分析
所要实现的功能:
(1) 设计一个10个用户的文件系统。每个用户最多可以保存10个文件,一次运行用户可打
开多个文件。
(2) 程序采用二级文件目录。(即设置主目录(MFD)和用户文件目录(UFD))。另外,可打
开文件设置指针。
(3) 为了方便实现,对文件的读写作了简化。在执行读写命令时,只需改读写指针。并不进
行实际的读写操作。
(4) 实现的基本功能主要包括:改变目录(CD),创建目录(MD),显示目录(DIR),删除目
录(RD),打开全部文件(openall),打开单个文件(open),建立一个文件(create),删除一个文件(delete),写文件(write),读文件(read),改文件的保护码(change),退出(exit)等。
考虑特殊情况如:各个命令对全路径和相对路径的支持、目录不存在时,给出错误信息、不能用cd进入文件、命令之中不能有空格(如 ex it,给出错误提示)、相对路径的解析、路径中的空格剔除、新建目录或文件时的问题、重名问题、目录或文件的名字长度限制、目录或文件的名字中包含不合法字符(注意空格)、删除目录或文件时的问题、删除不存在的文件或目录给出错误提示、删除目录时目录不为空(如果该目录为空,则可删除,否则给出是否做删除提示,删除操作将该目录下的全部文件和子目录都删除)、进入到某个目录下,却要删除本目录或上级目录、不能用delete删除目录、不能用RD删除文件等都要考虑在内。 最终获得的成果就是:
①在系统中用一个文件来模拟一个磁盘;
②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。 ③实现这个文件系统。
④能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。
2
1
总体设计
2.1系统活动图
注册 登陆 退出 用户管理系统 文件目录管理系统
新 删进打路登 建除入开径陆目目目
文控退录 录 录 件 制 出 目录内文件管理系统 新读写 登建文文删移陆 文件 件 除 动 退 件 出
2.2 头文件:
#include
typedef struct file{ char name[10]; struct file *next; FILE *fp; }File;
typedef struct content{ char name[10];
2
File *fileHead; int f_num;
struct content *next; }Content;
typedef struct user{ char name[10]; char psw[10]; Content *conHead; int c_num;
struct user *next; }User;
2.4 全局变量和函数: void registe() int login() void MenuUser() void FolderCreate() void FolderDelete() void FolderViewAllFiles() void FolderIntoFolder() void MenuFolder() void FileCreate() void FileRead() void FileWrite() void FileDelete() void FileMove()
3.详细设计 用户管理系统: registe():用户注册
login():用户登录
目录管理系统: FolderCreate():新建目录
FolderDelete():删除目录
3
FolderIntoFolder():进入目录
FolderViewAllFiles():显示所有目录内的所有文件
absolutePathFileController():通过绝对路径直接读文件
文件管理系统: FileCreate():新建文件 FileDelete():删除文件 FileMove():跨目录移动文件 FileRead():读文件
FileWrite():写文件
3.1 用户管理系统:
截图3-1
相关核心代码: //step0
void registe() {
if(user_num>=10) {
printf(\return; }
//allocate new memory block for new user User *add,*last;
add=(User *)malloc(sizeof(User)); add->next=NULL; if(user_head==NULL) user_head=add; else {
last=user_head;
while(last->next!=NULL) last=last->next; last->next=add;
4