文件系统的设计与实现(操作系统课程设计) 您所在的位置:网站首页 操作系统基本操作教案 文件系统的设计与实现(操作系统课程设计)

文件系统的设计与实现(操作系统课程设计)

2023-08-20 08:27| 来源: 网络整理| 查看: 265

转发请注明:http://blog.csdn.net/tianqingdezhuanlan/article/details/51344739

源码下载地址:http://download.csdn.net/download/u013255737/9513460

                     

  一、设计目的、意义

1.通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

2.意义:本文件系统采用多级目录,其中第一级对应于用户账号,第二级对应于用户账号下的文件,第三级对应文件夹下的文件,以此类推。另外,为了简单本文件系统未考虑文件共享、文件系统安全以及管道文件与设备文件等特殊内容。

二、设计分析 用户登录

   用户分为超级管理员、管理员和普通用户。超级管理员具有创建用户并设置权限的权限;

管理员与超级管理员权限基本相同。

建立文件

模拟文件系统进行“建立文件”的处理。

打开文件

约定操作类型与文件属性不符合和正处在“建立”状态的文件不允许打开。

关闭文件

对某个文件不需要再读或写的时候,用户应关闭该文件。

读文件

文件打开后可顺序读文件中的记录,读长度表示本次操作需读的记录个数。

写文件

执行写文件操作时要区分两种情况,第一种是在执行create后要求写,第二种是执行open后要求写。对第二种情况可认为用户要对一个已建立好的文件进行修改。一个文件可以分多次写,既可按记录顺序写也可随机写一个记录,采用顺序写时可省略记录号。

删除文件

把请求撤消的文件从拥护文件目录表中除名,收回该文件站用的存储区域。

文件列表

将目前本用户本路径的文件列出,并列出相关的属性。

结束

退出程序,返回原有操作系统。

三、方案分析 3.1 主要的数据结构

通过分析课程设计要求,具体设计出如下数据结构:

//用户类型定义

struct user {     char name[10];//用户名     int pride;//用户权限,1为管理员,0为普通用户     char pass[10];//用户密码 };

//定义空白区项

struct freeb {     int number;     struct freeb * next; };

//定义文件打开项

struct fileb {     int parent;//所在父节点     char name[15];//文件名     int pride;//读写权限,0只读,1读写     int  rex;//读写状态,0为没有,1读2写     struct fileb * next; };

//定义文件索引项

struct findex {     char name[15];     int number;     int parent;     char kind;     struct findex * next; };

//定义目录表项

struct dreitem {     char name[25];//目录或者文件名称     int share; //共享数     int parent;//上层目录     int pride;//文件操作权限,0只读,1读写     int empty;//是否是空闲块,0为空闲块,1为非空     char kind;//类型,文件为f,文件夹为d }; 3.2:流程图 3.2.1主流程图:

3.2.2创建文件夹流程图:

                                                   

 3.2.3创建文件流程图:

3.2.4写文件流程图:

3.2.5进入文件函数流程图:

3.2.6读文件流程图:

3.2.7删除流程图:

四、功能模块实现

4.1 login 登陆:

用户输入用户名和密码,在user文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。

4.2 createuser()新建用户:

先根据提示输入用户名,再判断此用户名是否已存在,若存在则重新输入,若没有,则用户创建成功。函数结束。                                                

4.3intlist()初始化空闲区链表以及文件索引链:

本函数在程序用运行后,对空闲区进行初始化。

4.4 newdrec()新建目录:

输入参数为要建立的类型,f为文件,d为文件夹。并输入权限(0只读,1读写)。在创建目录时,并检测是否有重名的目录,若有则创建失败;没有重名的就在空闲区添加,否则,直接在文件中添加。

4.5 lsfile()列出当前路径下的文件:

查找当前目录下的各种文件并列举出来。

4.6 back()目录后退

检测当前是否处于根目录下,不是则返回到上一目录;若当前处于根目录下,则无法后退。

五、最终结果分析

1:磁盘格式化后进入登录界面

2:先用超级管理员登陆后显示帮助信息并创建用户

3用户登陆后并列出当前目录下的内容

4.打开文件

5.关闭文件

6,当前路径

六、设计体会

 第一、操作系统这次课程设计让我学习到了很多计算机方面的知识,在一定程度上对以前的所学知识进一步加深,更让我有了一个系统的了解。操作系统是计算机的软件的系统的基础,具有一定平台性。掌握好这门课程对我们以后学习计算机知识有一个很大的帮助。

第二、本次课程设计让我明白了编写程序一定要动手去写代码,进行实际操作方可进取得一定性的进步,还要进行与组内人员之间的团结与协作。共同学习,共同克服困难,取得共同进步。

七、附录

  源代码:

#include #include #include #include #include #include #include #include #define getb(type) (type*)malloc(sizeof(type)) using namespace std; int usernowpride;//全局变量,当前用户类型 char usernowname[10];//全局变量,当前用户名 int nowlevel; //全局变量,当前目录层次 char usernowpath[200] = "\\\0" //用户类型定义 struct user {   char name[10];//用户名   int pride;//用户权限,1为管理员,0为普通用户   char pass[10];//用户密码 }; //定义空白区项 struct freeb {   int number;   struct freeb * next; }; struct freeb *fblk=NULL;//全局变量,系统空闲区链 //定义文件打开项 struct fileb {   int parent;//所在父节点   char name[15];//文件名   int pride;//读写权限,0只读,1读写   int  rex;//读写状态,0为没有,1读2写   struct fileb * next; }; struct fileb *flink=NULL;//全局变量,系统打开文件链 //定义文件索引项 struct findex {   char name[15];   int number;   int parent;   char kind;   struct findex * next; }; struct findex *fidx=NULL;//全局变量,文件索引链 //定义目录表项 struct dreitem {   char name[25];//目录或者文件名称   int share; //共享数   int parent;//上层目录   int pride;//文件操作权限,0只读,1读写   int empty;//是否是空闲块,0为空闲块,1为非空   char kind;//类型,文件为f,目录为d }; #include"FSMain.h" //新建用户 bool createuser() {   struct user newuser;   char name[10];   char pass[10];   int pride;   if(usernowpride!=1)   {        cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有