模拟文件系统实验报告
文件系统管理实训报告

一、实训背景随着信息技术的飞速发展,文件系统作为存储和管理数据的核心,其性能、稳定性和安全性越来越受到重视。
为了提高我们对文件系统管理的理解和实践能力,我们进行了文件系统管理实训。
本次实训以Linux系统下的文件系统管理为主要内容,通过实际操作,加深对文件系统结构、命令、权限管理等方面的认识。
二、实训目标1. 掌握Linux文件系统的基本结构;2. 熟悉常用的文件系统管理命令;3. 理解文件权限和属性的概念;4. 学会文件系统备份与恢复;5. 提高文件系统的安全性和性能。
三、实训内容(一)文件系统结构Linux文件系统采用树状结构,以根目录“/”为起点,所有文件和目录都从根目录开始分层排列。
常见的文件系统结构包括:1. 根目录(/):包含系统中的所有目录和文件;2. 换行目录(/bin、/sbin、/usr):存放常用的系统命令和系统服务;3. 用户目录(/home):存放用户个人文件和目录;4. 临时目录(/tmp):存放临时文件和程序;5. 系统目录(/etc、/var、/opt):存放系统配置文件、日志文件和可选软件包。
(二)文件系统管理命令1. ls:列出目录内容;2. pwd:显示当前目录的绝对路径;3. cd:切换目录;4. mkdir:创建目录;5. rmdir:删除空目录;6. touch:创建空文件;7. rm:删除文件或目录;8. cp:复制文件或目录;9. mv:移动或重命名文件或目录;10. chmod:修改文件权限;11. chown:更改文件所有者;12. chgrp:更改文件所属组。
(三)文件权限和属性Linux文件权限分为三组:所有者、所属组和其他用户。
每组权限包括读(r)、写(w)和执行(x)三种。
通过chmod命令可以修改文件权限,例如:- chmod 755 filename:设置所有者有读、写、执行权限,所属组和其他用户有读、执行权限;- chmod u+x filename:给所有者添加执行权限;- chmod g-w filename:取消所属组的写权限。
南邮操作系统实验4.文件系统模拟实现

关闭文件close close (fd);
实验内容及原理说明——实验4
读文件read
写文件write
nr = read (fd, buf, count); buf 为读出信息所应送入的用户数据区首地址 count 为要求传送字节数 nr 为实际读入字节数 一旦读到文件末尾,系统调用就返回,故nr可能小于 count,甚至为0 nw = write (fd, buf, count); 参数类似 read 其中 buf 是信息传送的源地址,即将buf指向的用户数 据区中的信息写入文件中
具体功能:
#include <unistd.h> #include <stdio.h> #include <fcntl.h>
实验内容及原理说明——实验4
创建文件creat(兼具打开功能)
fd = creat (filenamep, mode);
filenamep指向所要创建的文件路径名
实验4:文件系统的模拟实现
实验基本信息 实验内容说明
实验基本信息
实验名称
文件系统的模拟实现
实验类型:综合 学时:2+2 实验时间:13.5.30(下午3-4节) 地点:教5-501 实验环境:
VMWare + Ubuntu
实验内容及原理说明——实验4
实验目link、open、close、 read、write的使用,编程模拟实现文件系统基本功能 运行终端给出命令提示,请用户选择创建、删除、读、 写、退出等操作(可用数字表示不同命令) 根据用户选择命令,提示用户输入文件名、文件内容 等信息 执行用户命令
操作系统文件管理系统模拟实验

操作系统文件管理系统模拟实验在计算机科学中,操作系统是一种系统软件,负责管理计算机硬件和软件资源,并为用户和应用程序提供接口。
文件管理系统是操作系统的一个重要组成部分,它负责管理计算机系统中的文件和目录,以及提供对它们的访问和操作。
本次实验旨在模拟操作系统中文件管理系统的基本功能和操作。
我们将使用一个虚拟的文件系统,通过命令行界面来模拟用户与文件系统的交互。
以下是实验的具体内容和步骤:1. 创建虚拟文件系统首先,我们需要创建一个虚拟的文件系统。
文件系统由文件和目录组成,可以通过树状结构来表示。
我们可以使用一个数据结构来模拟文件系统的存储和管理。
2. 初始化文件系统在开始操作文件系统之前,我们需要初始化文件系统。
这包括创建根目录和设置当前目录为根目录。
3. 文件和目录的创建与删除文件和目录是文件系统的基本单位。
我们可以通过命令来创建和删除文件和目录。
例如,使用"mkdir"命令创建一个目录,使用"touch"命令创建一个空文件,使用"rm"命令删除文件或目录。
4. 文件和目录的访问权限文件和目录可以设置不同的访问权限,以保护文件系统的安全性。
我们可以使用"chmod"命令来修改文件或目录的权限。
权限通常包括读、写和执行权限。
5. 文件和目录的重命名和移动我们可以使用"mv"命令来重命名文件或目录,使用"cp"命令来复制文件或目录,使用"mv"命令来移动文件或目录。
6. 文件和目录的查找和显示我们可以使用"ls"命令来显示当前目录下的文件和目录,使用"cd"命令来切换当前目录,使用"pwd"命令来显示当前目录的路径。
此外,我们还可以使用"find"命令来查找文件或目录。
7. 文件和目录的读写操作文件可以被读取和写入。
操作系统试验模拟文件管理系统

一、实验目的和要求(必填)实验目的:通过在VC平台下编程,设计和调试一个简单的文件系统,通过模拟文件操作命令的执行,来模拟文件系统对文件及目录的管理。
实验要求:两名学生成组结对完成实验,仿真出文件系统中对文件和目录的操作。
二、实验内容(必填)文件管理:实现一个简单的文件系统三、实验原理或实验方法(必填)原理:通过结构体来描述文件和目录,利用链表知识实现目录树结构,通过对链表的操作实现整个文件系统中目录和文件的相关操作。
方法:学生两人结对进行实验,分别实现对文件和目录的操作。
对文件的操作包括:创建文件create、读文件read、写文件write、删除文件delete。
对目录的操作包括:创建目录mkdir、切换目录cd、展示目录内容dir、删除目录rm。
四、主要仪器设备或实验条件Windows操作系统,VC开发环境五、实验步骤(含实验数据记录处理)或操作设计过程记录#include "stdio.h"#include "iostream.h"#include "string.h"#define FILENAME_LENGTH 10 //文件名称长度#define COMMAND_LENGTH 10 //命令行长度#define PATH_LENGTH 30 //参数长度struct filenode{char filename[FILENAME_LENGTH];int isdir;char content[255];filenode *parent;filenode *child;filenode *prev;filenode *next;};filenode *initnode(char filename[],int isdir);void createroot();int run();int findpath(char *topath);void help();int mkdir();int create();int read();int write();int del();int rm();int cd();int dir();filenode *root,*recent,*temp,*ttemp,*temp_child;charpath[PATH_LENGTH],command[COMMAND_LENGTH],temppath[PATH_LENGTH],recen tpath[PATH_LENGTH];//创建文件或目录的存储节点filenode* initnode(char filename[],int isdir){filenode *node=new filenode;strcpy(node->filename,filename);node->isdir=isdir;node->parent=NULL;node->child=NULL;node->prev=NULL;node->next=NULL;return node;}//初始化文件系统根结点void createroot (){recent=root=initnode("/",1);root->parent=NULL;root->child=NULL;root->prev=root->next=NULL;strcpy(path,"/");}void help(){cout<<endl;cout<<"create: 建立文件。
文件系统 实验报告

文件系统实验报告引言文件系统是操作系统中的一部分,用于管理计算机中的文件和目录。
它提供了数据的存储、访问、组织和管理功能,是操作系统的基础之一。
本实验通过实现一个简单的文件系统来深入理解文件系统的原理和实现方式。
实验目的1. 了解文件系统的基本概念和原理;2. 学习文件系统的设计和实现方法;3. 掌握文件系统的基本操作。
实验环境本次实验使用的是Ubuntu 20.04操作系统。
实验步骤1. 文件系统的设计在开始实现文件系统之前,我们首先需要设计文件系统的结构和功能。
1.1 文件系统的结构文件系统通常由三个主要部分组成:文件控制块、目录和数据块。
文件控制块用于存储文件的属性和元数据,目录用于组织文件和子目录,数据块用于存储文件的实际内容。
1.2 文件系统的功能文件系统需要提供以下功能:- 文件的创建、读取、修改和删除;- 目录的创建、读取、修改和删除;- 文件和目录的查找;- 文件的权限管理。
2. 文件系统的实现2.1 文件系统的初始化在实现文件系统之前,我们首先需要初始化文件系统。
包括创建超级块、位图和根目录,并将它们写入磁盘。
2.2 文件和目录的操作在文件系统中,我们需要实现文件和目录的基本操作,包括创建文件、创建目录、读取文件内容、修改文件内容和删除文件。
2.3 文件系统的其他操作除了基本的文件和目录操作之外,文件系统还需要实现其他一些功能,如文件查找、权限管理等。
3. 文件系统的测试在完成文件系统的实现后,我们需要对其进行测试,以验证其功能是否正常。
3.1 创建文件和目录我们首先创建一些文件和目录,检查它们是否被正确地写入磁盘,并且能够被正确地读取。
3.2 读取和修改文件我们随机选择一些文件,读取它们的内容,并对其内容进行修改。
修改后,我们再次读取文件,确保修改成功。
3.3 删除文件和目录我们尝试删除一些文件和目录,并检查它们是否被成功地删除。
4. 结果与讨论经过测试,我们发现我们实现的文件系统功能正常,能够按照我们的预期进行文件和目录的创建、读取、修改和删除等操作。
操作系统文件系统模拟课程设计实验报告

院系:计算机科学学院
专业:软件工程
年级: 2018级
课程名称:操作系统
指导教师:帖军
学号: 2018 姓名:惺惺惜惺惺
2020年 4 月 25 日
实验
分项1
文件系统模拟
实验目的能设计一个简单的多用户文件系统。
①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。
③实现这个文件系统。
④能实际演示这个文件系统。
实验要求具体题目:文件系统模拟系统平台:Windows
实验原理步骤(算法流程)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录,如图所示。
文件系统结构如图所示。
简单文件系统模拟实验

简单文件系统模拟实验实验目的通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统功能和实现过程的理解。
实验内容▪在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。
在退出这个简单文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘上。
▪文件存储空间的分配可以采用显式链接分配或其它方法。
▪空闲空间的管理可以选择位示图或其它方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,可以将位示图合并到FAT中。
▪文件目录结构采用多级目录结构。
为简单起见,可以不使用索引结点,其中的每个目录项包含文件名、物理地址、文件长度等信息,还可以通过目录项实现对文件读和写的保护。
▪要求提供以下有关的文件操作:✧Format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。
✧Mkdir:用于创建子目录。
✧Rmdir:用于删除子目录。
✧Ls:用于显示目录。
✧Cd:用于更改当前目录。
✧Create:用于创建文件。
✧Open:用于打开文件。
✧Close:用于关闭文件。
✧Write:用于写文件。
✧Read:用于读文件。
✧Rm:用于删除文件。
数据结构设计磁盘:整个磁盘为一个char数组,数组中的每一个元素当做是一个扇区,每个扇区可以存储1个字节的信息,簇大小为8字节。
FAT表:存储的是指定编号的簇的下一个簇的编号是什么,因为文件是有可能分散在很多的簇里。
文件和文件夹链表:设计为静态链表,每个文件夹都会有一个子目录列表,存在链表中。
文件和目录表:文件和目录相同对待,信息存放在文件目录表中,为一个数组类型。
以上所有的信息存放在一个fs结构体中,所有的结构都为静态实现,所以需要将文件系统存放到磁盘中的时候只需要将整个结构体以二进制性质存放到文件中或者是将从文件中以二进制形式读取。
模拟UNIX文件系统

模拟UNIX/Linux文件系统
(3)目录结构 • 用16字节表示,其中14字节为文件名,2字节为I节点号 (4)用户及组结构 • 用户信息中包括用户名、口令,所属组,用户打开文件表 • (文件树结构应与用户相对应:有每个用户的HOME目录) • 组信息中可只包含组名
(5)文件树结构 除(4)要求外,适当考虑UNIX/Linux本身文件树结构
1. 检查超级块上锁否。
2. 检查i结点编号栈满否。 3. 若i结点编号栈未满,便将回收的i结点的编 号进栈,并使当前空闲i结点数加1。 4. 置超级块修改标志后返回。
超级块
512字节/块
0#块(第一个512字节)
根目录文件
.
.. bin usr dev
1#块(第二个512字节) 每个inode 占32字节 …21#...
模拟UNIX/Linux文件系统
(6)实现功能 • Ls 显示文件目录 • Chmod 改变文件权限 • Chown 改变文件拥有者 • Chgrp 改变文件所属组 • Pwd 显示当前目录 • Cd 改变当前目录 • Mkdir 创建子目录 • Rmdir 删除子目录 • Umask 文件创建屏蔽码 • Mv 改变文件名 • Cp 文件拷贝 • Rm 文件删除 • Ln 建立文件联接 • Cat 连接显示文件内容 • Passwd 修改用户口令
分配过程如下:
1. 检查超级块ห้องสมุดไป่ตู้锁否。
2. 检查i结点栈空否。 3. 从空闲i结点编号栈中分配一个i结点,并且加 以初始化,填写有关文件的属性。 4. 分配内存i结点。创建新文件后,随即把它打 开。调用iget过程为之分配内存i结点。 5. 将磁盘i结点总数减1,并在置超级块的修改标 志后返回。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统大型试验实验报告姓名:XX班级:软件工程110x学号:*********xxx一、名称操作系统大型试验。
二、目的用C++编写出一个简单的模拟文件系统,实现目录的添加、删除、重命名,文件的添加、删除、重命名、文件和目录、文件的拷贝。
三、要求开发工具:word,vc win32api1.设计和实现一个简单的文件系统,要求包括目录、普通文件和文件的存储2.文件系统的目录结构采用类似Linux的树状结构;3.要求模拟的操作包括:a)目录的添加、删除、重命名;b)目录的显示(列表)c)文件的添加、删除、重命名d)文件和目录的拷贝4.用户进入时显示可用命令列表;用户输入help时显示所有命令的帮助文档;输入某个命令+?时显示该条命令的使用说明5.用户输入exit时退出该系统6.实验实现基于windows平台;7.实验开发语言可以选用C/c++等四、设计1.主要思路说明本模拟系统通过一个大小固定的数组要代表物理盘块,假设共有1024块,新增目录占一块,新增文件占一块,文件中可输入内容,内容假设定义为5个字符占一块,超出则应新申请空间。
模拟物理盘块的数组中,数组内容为-99代表改物理盘块内容为空,可使用,其他数字均代表该物理盘块被占用,其中-3代表是占用文件的末结点,其他整数代表是文件内容的下一个寻址下标,另有一个string类型的数组来存储内容,模拟文件写入了对应下标的物理盘块中。
设置了一个全局指针指向根结点,一个全局指针指向当前操作目录。
搜索空白物理盘块时采用顺序搜索物理盘块数组。
存储形式主要采用类似二叉树结构,如目录为根,目录下的第一个文件或目录存在根的子节点,目录下的其他文件或目录存在第一个文件或目录的兄弟节点,以此类推。
本程序仅seperate()函数使用现成代码,此函数功能为将输入命令串分离,仅仅起到美观作用,其余所有代码均为原创!2.申优功能:1)能实现动态增长,即当输入文件的内容大小大于分配的模拟物理盘块时系统能够自动寻找空物理盘块并分配,将超出的内容保存在新的物理盘块中,若超出模拟磁盘大小,则超出部分不保存且返回提示。
2)能实现级联删除,即当删除目录(文件夹)时,目录下的所有内容也应当删除并正确释放物理盘块空间。
3)能实现目录的复制,即复制目录时(文件夹)时,该目录下的所有文件和目录也应准确复制至目标目录中,并正确分配物理盘块空间。
3.主要函数和类的定义1)主要函数定义#define show_bnum 20//显示物理盘块的块数#define block_size 1024//物理盘块块数int block[block_size];//假设有block_size块物理盘块string content[block_size];//存放文件内容int Msize=5;//此处为模拟磁盘大小为输入5个字符fnode *root=new fnode("WP:",0,0);//设置根目录fnode *current_path=new fnode();//当前路径fnode *seek_flag=new fnode();//作为查找标志fnode *cp_flag=new fnode();//作为复制的位置标志void initialize();//初始化int seekTarget(string name);//搜索文件或目录int seek_log(string name);//搜索目录void delete_node(string name);//删除节点int freeblock(fnode *);//释放物理盘块int seekfreeblock();//搜索可用物理盘块void show_current_path();//显示当前路径void add_file(string name,int t);//增加目录、文件void show_curpath_all();//显示当前目录下的所有文件void rename_file(string Oname,string Nname);//重命名void seperate();//分离命令void cd();//进入目录void add_File();//增加文件功能入口void add_Log();//增加目录功能入口void delete_file();//删除文件或目录功能入口void show_memory();//显示物理盘块占用情况void re_name();//重命名功能入口void help();//查看帮助void show_content();//查看文件内容void write_file();//写文件void Clear_();//清屏void Exit();//退出void cp();//复制功能入口void cp_log(fnode *target,fnode *source);//复制目录void cp_file(fnode *target,fnode *source);//复制文件void cp_node(fnode *target,fnode *source);//复制节点int find_target_log();//找到复制的目标目录int calculate_logsizeMain(fnode *);//计算目录大小int calculate_logsize(fnode *);2)文件节点类的定义:class fnode{public:string filename;//文件名int type;//文件类型,1为普通文件,0为目录文件fnode *parent;//父节点fnode *child;//子节点fnode *brother;//兄弟节点int block_num;//表示占用的物理盘块块号int isBro;//表示是否是在同级目录下,0表示不是,1表示是int isCld;//是否为目录下第一个节点,1表示是,0表示不是fnode()//初始化{type=-1;parent=NULL;child=NULL;brother=NULL;block_num=-1;isBro=0;isCld=0;}fnode(string n,int t,int b)//根节点初始化{type=t;filename=n;parent=NULL;child=NULL;brother=NULL;block_num=b;block[block_num]=-3;isBro=0;isCld=0;}fnode(fnode *p,string name,int t,int b)//文件节点初始化{parent=p;filename=name;type=t;child=NULL;brother=NULL;block_num=b;block[block_num]=-3;isBro=0;isCld=0;}void copy(fnode *cp)//拷贝函数{filename=cp->filename;type=cp->type;parent=cp->parent;child=cp->child;brother=cp->brother;block_num=cp->block_num;}};4.命令:命令解释echo echo命令可以在当前目录下创建一个文件,具体格式:echo+name md md命令可以在当前目录下创建一个目录文件,具体格式:md+name del del命令可以在当前目录下删除一个已存在的文件或目录(支持级联删除),具体格式:del+namecd cd命令可以进入下一级目录或返回上级目录、根目录,具体格式:cd+name或cd+.或cd+..cp cp命令可以复制当前目录下一个指定的文件或目录至指定的目录,具体格式:cp+name+roaddir dir命令可以显示当前目录下的所有文件和目录,具体格式:delren ren命令可以重命名一个存在于当前目录下的文件或目录,具体格式:ren+name +new nametyp typ命令可以查看当前目录下一个文件的内容,具体格式:typ+name wrt wrt命令可以在当前目录下写内容至一个已存在的文件,具体格式:wrt+name +contentmem mem命令可以查看模拟物理盘块的使用情况,具体格式:memcls cls命令为清屏命令,具体格式:clsexit exit命令为退出命令,具体格式:exit五、关键技术流程图及说明提示:若图中文字无法看清,可用Micorsoft Visio打开压缩包下“部分程序流程图”文件夹的绘图文件查看。
1.增加文件或目录(此功能比较简单,流程图写的较详细就不做说明):2.删除目录(实现级联删除):说明:删除目录时删除文件和删除目录本身放在同一个函数中,删除目录下的所有文件放在freeblock函数里,这样比较好处理。
下面给只给出递归函数的流程图。
3.将内容写入文件(实现动态增长):说明:图中Msize为模拟规定的文件块字符串大小,比如Msize=5,那么一个物理盘块只能存5个字符,超出则要申请新的空间。
主要采用双重循环方法写入,外层循环为需要的块数,内层循环为Msize,用string累加字符串内容,内层循环退出后新申请一个空间并将对应下标赋给上一个物理盘块数组,再将对应内容存入content(为string类型的数组,模拟存储内容)数组中,直至退出外层循环。
4.复制目录:说明:这里和删除目录一样,写了两个复制函数,这样写同样因为递归调用是比较方便,第一个函数传入参数为目标目录指针和被复制的目录的指针,第一个函数里新建了一个阶段复制被复制的目录的内容,然后将新建节点的子节点和被复制目录的子结点传入下一个递归调用函数(因为目录的内容存于目录的子节点,与兄弟节点无关),第二个函数就是递归调用函数cp_node,下面就只给出cp_node的流程图(复制之前同样进行了路径的判误操作,内存大小的判断操作,是否重名的判断操作,被复制目录是否存在判断操作,这些操作在递归函数之前完成,所以下面的递归函数不体现这些操作)。
六、运行结果1.主界面展示:图:主界面展示2.help命令展示:图:help命令展示3.echo命令展示:图:echo命令展示4.del命令展示:图:del命令展示-普通删除说明:创建了目录log1,在log1中创建一系列文件和目录,磁盘使用情况显示已分配,实用del删除命令后查看磁盘分配证明级联删除是可靠的。
图:del命令展示-级联删除5.md命令展示:图:md命令展示6.cd命令展示:说明:图中展示了cd+name、cd+.、cd+..三种cd命令的使用和判别情况。