实验六模拟文件系统
(完整word版)操作系统试验——模拟文件管理系统(word文档良心出品)
bool boot();//启动初始化
filenode* find(char *str,filenode *_root);//递归对目录树进行查找
bool cdexc(char *str);//执行cd命令
bool direxc(char *str);//执行dir命令
case 2 : puts("文件/目录已存在!");break;
case 3 : puts("语法不正确!");break;
case 4 : puts("无法删除根目录!");break;
case 5 : puts("不存在命令!");break;
case 6 : printf("有下列命令可供使用:\n[1] cd\t切换当前目录\n[2] dir\t显示目录内容\n[3] md\t新建目录\n[4] rd\t删除目录\n[5] edit\t新建文件\n[7] del\t删除文件\n[8] exit\t推出系统\n\n");break;
Struct FileNode *sibling_prev,*sibling_next;//指向前一个兄弟的指针和后一个兄弟的指针。
}
三、算法设计
3.1
3.2.
bool spile(char *str,char *cmdstr,char *filestr);//切割字符串
bool shell(char *str);//用来解释命令
int shelllen=7;//命令的字符串的长度
typedef struct filenode_i{//文件节点
char filename[FILENAME_LEN];//文件名
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验在计算机科学中,操作系统是一种系统软件,负责管理计算机硬件和软件资源,并为用户和应用程序提供接口。
文件管理系统是操作系统的一个重要组成部分,它负责管理计算机系统中的文件和目录,以及提供对它们的访问和操作。
本次实验旨在模拟操作系统中文件管理系统的基本功能和操作。
我们将使用一个虚拟的文件系统,通过命令行界面来模拟用户与文件系统的交互。
以下是实验的具体内容和步骤:1. 创建虚拟文件系统首先,我们需要创建一个虚拟的文件系统。
文件系统由文件和目录组成,可以通过树状结构来表示。
我们可以使用一个数据结构来模拟文件系统的存储和管理。
2. 初始化文件系统在开始操作文件系统之前,我们需要初始化文件系统。
这包括创建根目录和设置当前目录为根目录。
3. 文件和目录的创建与删除文件和目录是文件系统的基本单位。
我们可以通过命令来创建和删除文件和目录。
例如,使用"mkdir"命令创建一个目录,使用"touch"命令创建一个空文件,使用"rm"命令删除文件或目录。
4. 文件和目录的访问权限文件和目录可以设置不同的访问权限,以保护文件系统的安全性。
我们可以使用"chmod"命令来修改文件或目录的权限。
权限通常包括读、写和执行权限。
5. 文件和目录的重命名和移动我们可以使用"mv"命令来重命名文件或目录,使用"cp"命令来复制文件或目录,使用"mv"命令来移动文件或目录。
6. 文件和目录的查找和显示我们可以使用"ls"命令来显示当前目录下的文件和目录,使用"cd"命令来切换当前目录,使用"pwd"命令来显示当前目录的路径。
此外,我们还可以使用"find"命令来查找文件或目录。
7. 文件和目录的读写操作文件可以被读取和写入。
模拟文件系统(多级,含源代码)
内含源代码,不懂可以百度消息给我多级文件目录管理实训报告--FileManager院别:计算机学院姓名:LDY学号:20110040xxxxxx班级:计Y11x广西科技大学大学计算机学院Creation time:2013-1-8 17:44:25目录1实验目的 (2)2实验内容 (2)2.1实验题目:树状多级文件目录管理系统 (2)2.2实验要求:功能实现 (2)3设计分析 (3)3.1数据结构分析:树形目录的存储、删除及树的显示 (3)3.2 数据结构定义 (7)3.3 功能分析和函数定义 (10)4 功能总览 (15)4.1 功能总览 (15)4.2主要功能 (15)5 实训总结 (19)5.1 所遇困难 (19)5.2 心得体会 (20)1实验目的本次实训的总体目的在于通过系统的编程训练,培养学生编写一个具有一定难度的小型系统的能力,培养学生从编写单个程序,实现单个程序功能到进行系统开发,整体调试的能力。
从知识点的角度来说,目的在于通过本实训项目,让学生对链表或二叉树这一重要数据结构的运用更加熟练。
2实验内容2.1实验题目:树状多级文件目录管理系统本次实训的题目是树状多级文件目录管理系统。
要求利用数据结构的知识,采用链表的形式或通过将树转换为二叉树的概念,采用孩子兄弟二叉树的方式实现文件目录系统。
不容许采用数据库实现文件管理。
每个树结点表示一个文件(包括目录文件),成员基本信息可包含,文件名、文件属性、文件大小、文件创建时间,文件最后修改时间、文件最后访问时间等信息。
具体属性自行确定(注意:成员基本信息尽量与Window系统中文件具有的属性信息相同,以便对文件进行磁盘存取时保证文件的属性信息不丢失)。
2.2实验要求:功能实现要求实现的总体基本功能包括:文件的创建和删除;文件夹的创建和删除;文件的读写和执行;文件的层次化显示;打开和关闭文件;显示目录下的文件;查找给定文件和目录;根据给定属性对文件进行排序;选做功能包括:将内存中的多级文件系统存储到磁盘中,将磁盘中某目录下的文件系统读入系统并回购多级目录系统。
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验操作系统文件管理系统模拟实验一、实验目的本实验旨在通过模拟操作系统的文件管理系统,加深对操作系统文件管理的理解,锻炼操作系统的应用能力。
二、实验环境1、操作系统:Windows/Linux/MacOS2、编程语言:C/C++/Java/Python等三、实验内容1、初始化文件管理系统1.1 创建根目录,并初始化空文件目录1.2 初始化用户目录和权限设置2、文件操作2.1 创建文件2.1.1 检查文件名合法性2.1.2 检查文件是否已存在2.1.3 为新文件分配磁盘空间2.1.4 添加文件元数据信息2.2 打开文件2.2.1 检查文件是否存在2.2.2 检查用户权限2.3 读取文件内容2.3.1 读取文件权限检查2.3.2 读取文件内容2.4 写入文件内容2.4.1 写入文件权限检查2.4.2 写入文件内容2.5 删除文件2.5.1 检查文件是否存在2.5.2 检查用户权限2.5.3 释放文件占用的磁盘空间2.5.4 删除文件元数据信息3、目录操作3.1 创建子目录3.1.1 检查目录名合法性3.1.2 检查目录是否已存在3.1.3 添加目录元数据信息3.2 打开目录3.2.1 检查目录是否存在3.2.2 检查用户权限3.3 列出目录内容3.3.1 列出目录权限检查3.3.2 列出目录内容3.4 删除目录3.4.1 检查目录是否存在3.4.2 检查用户权限3.4.3 递归删除目录下所有文件和子目录3.4.4 删除目录元数据信息四、实验步骤1、根据实验环境的要求配置操作系统和编程语言环境。
2、初始化文件管理系统,创建根目录,并初始化用户目录和权限设置。
3、进行文件操作和目录操作。
五、实验结果分析根据实验步骤进行文件操作和目录操作,观察系统的运行情况并记录相关实验结果。
六、实验结论通过本实验,深入了解了操作系统中文件管理系统的相关原理和实现方式,并且通过实验操作进一步巩固了相应的应用能力。
操作系统试验模拟文件管理系统
一、实验目的和要求(必填)实验目的:通过在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: 建立文件。
操作系统 实验六 文件系统设计试验
实验报告
(2014—2015学年第二学期)
课程名称操作系统
实验名称实验六文件系统设计试验
专业计算机科学与技术(非师)
年级2012级
学号B2012102147姓名王秋
指导教师王远帆
实验日期2015-06-20
实验目的与要求:
通过设计一个基于索引结构的文件系统,加深对文件系统的基本知识理解。了解文件系统设计的基本概念。
(1)熟悉文件系统的物理结构;
(2)熟悉文件系统的目录管理;
(3)掌握文件系统空闲空间管理的基本方法;
(4)进一步理解现代操作系统文件管理知识。
实验设备(环境):
(1)一台安装有Cygwin Terminal的计算机
(2)WindowsXP操作系统
(3)VC++6.0
实验内容:
(1)熟悉文件系统的物理结构;
(5)设计文件系统的其它功能;
实验结论:
试验运行结果:
图1程序Байду номын сангаас行结果
4、思考
该试验中,从功能能上讲,根据所学的文件系统管理方面知识,你所设计的(模拟)文件还有那些没有实现:
对以后设计的修改建议:
目前所做的修改及实际结果如下:
程序清单:
#include "stdio.h"
#include "stdlib.h"
for(k=1;k<=jobs;k++)run();//每个文件进行一次分配
//回收资源
fclose(e);
for(i=0;i<32;i++){free(HEAD->p[i]);HEAD->p[i]=NULL;}
简单文件系统模拟实验
简单文件系统模拟实验实验目的通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统功能和实现过程的理解。
实验内容▪在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。
在退出这个简单文件系统时,应将该虚拟文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘上。
▪文件存储空间的分配可以采用显式链接分配或其它方法。
▪空闲空间的管理可以选择位示图或其它方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,可以将位示图合并到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,并在置超级块的修改标 志后返回。
操作系统:实验6文件管理(实验报告)
操作系统:实验6文件管理(实验报告)班级:姓名:学号:在本节实验中,通过对Windows 提供的文件与文件夹加密、磁盘配额管理、创建紧急修复磁盘、进行磁盘清理、执行备份操作、使用CHKDSK 维护文件完整性和整理磁盘碎片等功能进行操作:1) 熟悉Windows 的文件系统。
2) 明确应用NTFS 文件系统的积极意义。
3) 掌握优化Windows 磁盘子系统的基本方法。
4) 进一步理解现代操作系统文件管理知识。
1. 工具/准备工作在开始本节实验之前,请回顾教材的相关内容。
需要准备一台运行Windows 系统的计算机。
2. 实验内容与步骤(1) 请回答:1) Windows 支持哪3种主要的文件系统:a.__________________________________________________________________b.__________________________________________________________________c.__________________________________________________________________2) NTFS 文件系统只能用于哪些操作系统环境:________________________________________________________________ ____(2) 加密文件或文件夹。
1) 右键单击想要加密的文件或文件夹,然后单击“属性”命令。
2) 在“常规”选项卡上,单击“高级”按钮。
在“高级属性”对话框中,可以设置的文件属性有:________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ________________________________________________________________________ 实验6 文件管理(3) 访问RSM服务。
模拟文件系统
操作系统课程设计-模拟文件系统班级:计044班姓名:夏鑫学号:2004121228一.实验目的用高级语言编写和调试一个简单的文件系统。
模拟文件管理的工作过程。
加深理解文件系统的内部功能和内部实现。
二.基本要求在任意一个OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟UNIX文件系统。
可以实现下列几条命令FORMAT 初始化MKF 创建文件(给出文件名,文件长度)MKD 创建目录CD 改变当前目录(CD .. 返回根目录)DELF 删除文件DELD 删除目录DIR 显示文件目录(当前目录下)HELP 获得命令的帮助EXIT 退出系统三.设计思想说明1.设计环境课程设计的环境是windows xp sp2操作系统。
在windows系统中创建一个较大容量的文件,作为所设计文件系统的假想的“文件卷”,从而编写各程序模块。
2.开发环境课程设计所使用的开发环境是VC++ 6.03.基本思想以 1M 的存储器空间为例作为文件空间,空间“分块”。
超级块,在最前面,共占3.2k个字节。
其中0.2K个字节存放目录节点的位示图,1K个字节存放文件节点的位示图,2k字节存放盘块节点的位示图。
用位状态='0'表示空闲,状态='1'表示已分配。
后半部用于存放目录接点和文件接点。
超级块不参与文件空间的动态分配。
其他块用于存贮目录接点和文件接点的信息。
该程序在系统盘内自动创建一个目录A :作为该系统的根目录。
四.需求分析该模拟文件系统包括目录文件(简称目录)、普通文件(简称文件),并实现下面一些基本功能:1.改变目录:CD 〈目录名〉,工作目录转到指定的目录下。
CD .. ,返回上一级目录下2.创建文件:MKF 〈文件名〉,创建一个指定名字的新文件,即在目录中增加一项,不考虑文件的内容。
3.删除文件:DELF 〈文件名〉,删除指定的文件。
4.显示目录:DIR [〈目录名〉],显示目录下全部文件和第一级子目录,如果没有指定路径名,则显示当前目录下的内容。
操作系统课程实验报告-实验六文件系统
hierarchy, filesCompareOutput = diffDir(sys.argv[1], sys.argv[2])
print('{0}\n 比较文件结构:\n{0}'.format(' '*10)) PrintHierarchy(hierarchy) print() if len(filesCompareOutput) != 0:
subname[1])
# 合并结果
filesCompareOutput += subCompareOutput
sameFileHierarchy.append(('{0}'.format(name),
subFileHierarchy))
elif ( os.path.isfile(subname[0])
华南理工大学 操作系统课程实验报告
实验概述
【实验目的及要求】
加深对 linux 文件系统的理解。 实现一个“difftree”命令,其功能是比较两个目录下的文件结构和文件信 息。当在命令行方式下执行“difftree <dir1> <dir2>”命令时,能够比较目录 dir1 和 目录 dir2 是否具有相同的结构,对相同的部分,进一步比较相同文件名的 文件内容。列出比较的文件系统结构图。 本实验是对单个文件比较的扩展,设计中需要考虑目录操作。
for item in hierarchy: if isinstance(item, tuple): print(' '*level*3 + ' ' + item[0] + '/') PrintHierarchy(item[1], level+1) else: print(' '*level*3 + ' ' + item)
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验1. 实验目的本实验旨在通过模拟操作系统的文件管理系统,深入理解操作系统中文件的组织结构、文件的创建、读写和删除操作,以及文件系统的管理策略。
2. 实验背景操作系统是计算机系统中的核心软件,负责管理计算机的资源并提供用户与计算机硬件之间的接口。
文件管理系统是操作系统的重要组成部分,用于管理计算机中的文件和目录结构,提供文件的读写、创建和删除等操作。
3. 实验环境本实验可以在任何支持操作系统模拟的计算机上进行,如使用虚拟机软件搭建的操作系统环境或在线操作系统模拟器。
4. 实验步骤4.1 文件系统初始化在模拟实验开始之前,需要对文件系统进行初始化。
可以选择创建一个空的文件系统或使用预先定义好的文件系统。
4.2 文件的创建在文件系统中创建一个新文件。
可以指定文件的名称、大小、属性等信息。
文件创建成功后,可以在文件系统中查看该文件的相关信息。
4.3 文件的读取选择一个已经存在的文件,并从文件系统中读取该文件的内容。
可以通过指定文件的路径或名称来进行读取操作。
读取文件时,可以选择按字节、按行或按块进行读取。
4.4 文件的写入选择一个已经存在的文件,并向该文件中写入内容。
可以选择覆盖原有内容或在文件末尾追加新内容。
写入文件时,可以选择按字节、按行或按块进行写入。
4.5 文件的删除选择一个已经存在的文件,并从文件系统中删除该文件。
删除文件后,文件系统中将不再存在该文件的相关信息。
5. 实验结果分析在完成实验步骤后,可以对实验结果进行分析和总结。
可以比较不同文件的读写操作所消耗的时间和资源,评估不同文件系统管理策略的性能优劣。
6. 实验注意事项6.1 在进行文件操作时,务必注意文件的权限和保护机制,避免误操作导致数据丢失或系统崩溃。
6.2 在进行文件读写操作时,要注意文件的大小和系统资源的限制,避免因为文件过大或系统资源不足而导致操作失败。
6.3 在进行文件删除操作时,要谨慎操作,避免误删重要文件或系统关键文件,导致系统无法正常运行。
文件系统模拟实验(C-实验教材)
文件系统实验1.1实验目的和要求1.1.1实验目的通常把文件与管理信息资源的管理程序的集合称为文件系统,它是操作系统中负责存取和管理信息资源的模块,采用统一的方法管理用户信息和系统信息的存储、检索、更新、共享和保护,并为用户提供一套行之有效的文件使用及操作方法。
本实验利用高级语言编写程序模拟文件系统,了解文件系统的基本结构和文件的各种操作方法,加深理解文件系统的内部功能及内部实现,从而帮助学生对各种文件操作命令的实质内容和执行过程有比较深入的了解。
1.1.2实验要求1.采用高级语言编写程序模拟文件系统,文件系统采用多级目录结构,实现对文件和目录的创建、删除、重命名、变更权限、显示文件内容、修改文件内容等操作。
2.撰写实验报告,报告应包含以下内容:(1)实验目的;(2)实验内容;(3)设计思路;(4)程序流程图;(5)程序中主要数据结构和函数说明;(6)带注释的源程序代码;(7)程序运行结果及分析(8)实验收获与体会1.2预备知识1.2.1文件和文件系统1.文件概念现代计算机系统中都配置了外存,大量的程序和数据以文件的形式存放在外存。
如果由用户直接管理文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且多用户环境下还必须能保持数据的安全性和一致性,这是用户不能胜任的。
因而,现代操作系统中都配备文件系统,以适应系统资源管理和用户使用信息的需要。
文件是指由创建者所定义的、具有文件名的一组相关元素的集合。
用户通过文件名就可对文件进行访问,文件名是由字母或数字组成的字母或数字串,其格式和长度都因系统而异。
操作系统提供文件系统的优点有:(1)便于用户使用。
(2)文件安全可靠。
(3)系统能有效利用存储空间,优化安排不同属主文件的位置。
(4)文件系统还能提供文件共享功能。
2.文件命名在不同的操作系统中对文件名的规定有所不同,文件名的格式和长度因系统而异。
一般来说,文件名由文件名和扩展名两部分组成,前者用于标识文件,后者用于区分文件类型,中间用“.”分割开来,它们都是字母或数字所组成的字母数字串。
操作系统试验模拟文件管理系统
操作系统试验摹拟文件管理系统一、引言文件管理是操作系统中的重要组成部份,它负责对计算机中的文件进行组织、存储和访问。
摹拟文件管理系统是为了更好地理解文件管理的原理和实现方式而设计的一个实验项目。
本文将详细介绍摹拟文件管理系统的设计和实现。
二、设计目标1. 实现基本的文件管理功能,包括文件的创建、删除、打开和关闭。
2. 实现文件的读写操作,包括顺序读写和随机读写。
3. 实现文件的共享和保护机制,确保多个进程可以同时对同一个文件进行读写操作。
4. 实现文件的索引和目录结构,方便文件的查找和管理。
5. 实现文件的存储管理,包括空暇空间管理和磁盘分配算法。
三、系统设计1. 文件的创建和删除在摹拟文件管理系统中,可以通过命令行或者图形界面来创建和删除文件。
创建文件时,系统会为该文件分配一个惟一的文件标识符,并在文件目录中记录该文件的相关信息。
删除文件时,系统会释放该文件占用的存储空间,并从文件目录中删除该文件的记录。
2. 文件的打开和关闭在摹拟文件管理系统中,可以通过命令行或者图形界面来打开和关闭文件。
打开文件时,系统会根据文件标识符在文件目录中查找该文件的相关信息,并将该文件的描述符返回给用户进程。
关闭文件时,系统会释放该文件的描述符,并更新文件的相关信息。
3. 文件的读写操作在摹拟文件管理系统中,可以通过命令行或者图形界面来进行文件的读写操作。
顺序读写是指按照文件的存储顺序挨次读取或者写入文件的内容,而随机读写是指根据文件的索引或者偏移量来读取或者写入文件的内容。
系统会根据用户进程的读写请求,将相应的数据从磁盘中读取或者写入到内存中。
4. 文件的共享和保护机制在摹拟文件管理系统中,多个进程可以同时对同一个文件进行读写操作。
系统会通过锁机制来实现文件的共享和保护。
当一个进程正在对文件进行读写操作时,其他进程需要等待该进程释放文件的锁才干对文件进行读写操作。
同时,系统还可以设置文件的访问权限,确保惟独具有相应权限的进程才干对文件进行读写操作。
实验六模板(文件系统)
实验报告(六)文件系统一、实验目的通过学习Linux操作系统文件和目录操作命令的使用,以及基于目录相关的系统调用函数的编程,加深理解操作系统文件管理的相关概念和原理。
二、实验内容、过程与分析(一)实验内容1、练习使用文件相关命令(1)命令“ls -l ”查看当前目录中文件详细信息。
“-l” 选项使得ls命令显示详细信息,示例如下。
每一项的说明如下。
注意第二项中的1,表示硬链接数量。
(2)硬链接和符号链接命令cd //进入用户主目录命令pwd //显示当前所在目录或工作目录命令mkdir playground //创建目录命令cd playground命令mkdir dir1 dir2 //创建两个目录命令touch fun //创建空文件fun命令ls -l fun //查看文件fun详细信息,注意观察在创建或删除硬链接前后,fun及其硬链接文件的链接数的变化命令ln fun fun-hard1 //为文件fun创建硬链接fun-hard1命令ls -l //查看fun和fun-hard1详细信息命令ln fun fun-hard2 //创建硬链接命令ls -l //查看fun、fun-hard1、fun-hard2详细信息删除硬链接:命令rm fun-hard2命令ls -l //查看fun、fun-hard1详细信息命令cp fun fun2 //复制文件命令ln -s fun2 fun2-sym1 //为文件fun2创建符号链接(也称为软链接)fun2-sym1 命令ln -s fun2 dir1/fun2-sym2 //创建符号链接命令ln -s fun2 dir2/fun2-sym2 //创建符号链接通过命令“ls -l”查看fun2、fun2-sym1、dir1/fun2-sym2、dir2/fun2-sym2详细信息。
符号链接本身是一种特殊文件,此文件的内容是所指向的文件的路径和文件名。
模拟文件系统实验报告
操作系统大型试验实验报告姓名:XX班级:软件工程110x学号:201126630xxx一、名称操作系统大型试验。
二、目的用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)能实现动态增长,即当输入文件的内容大小大于分配的模拟物理盘块时系统能够自动寻找空物理盘块并分配,将超出的内容保存在新的物理盘块中,若超出模拟磁盘大小,则超出部分不保存且返回提示。
模拟UNIX(linux)文件系统
操作系统课程设计学院:信息科学与工程学院专业:班级:学号:学生姓名:指导教师:2009 年 4 月18 日一、实验内容1、题目:模拟UNIX(linux)文件系统[问题描述]在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟UNIX文件系统。
二、概要设计在现有机器硬盘上开辟20M的硬盘空间(利用一个循环操作,在Disk中写入20M 的零,创建一个20M的文件即是),作为设定的硬盘空间。
磁盘块物理模型如下文件则是指具有文件名的若干相关元素的集合。
文件属性主要如下文件名:实现了按名存取,文件名和目录文件允许重名。
文件类型:可以从不同的角度来规定文件的类型。
普通文件、管道文件、块文件。
文件长度:指文件的当前长度,长度的单位可以是KB。
文件的物理位置:文件在磁盘中物理的存储,并打印出来。
此次UNIX文件系统最简单的目录结构。
整个文件系统中只建立一张目录表,每个文件一个目录项,目录项含有文件相关信息。
每建立一个新文件要先检索所有的目录项保证文件名唯一。
然后找出一空白目录项填入相关信息,并修改状态位。
删除文件是找到对应目录项,回收所占用空间,清除该目录。
逻辑结构如下Unix文件系统当文件很多时,文件目录要占用大量的盘块。
在查找目录的过程中,可能需要多次启动磁盘读入目录文件的盘块。
在检索目录文件中只用到了文件名,显然,文件的物理地址等文件的描述信息在检索目录时不需调入内存。
为此,可以把文件名与文件描述信息分开。
使文件描述信息单独形成一个索引结点。
把文件描述信息单独形成一个称为索引结点的数据结构,简称为inode;文件目录中的每个目录项,则仅由文件名及指向该文件所对应的inode的指针所构成。
这样,为找到一个文件的平均启动磁盘的次数减少很多模型如下:存储空间的分配与回收成组链接法首先,建立操作系统课程的设计模型。
这个系统将利用一个20M的文件作为自己的磁盘空间,设计时由于一个盘块占用1KB,所以20M空间可以产生20480个盘块系统本身将0# - 30#块作为系统区,所以用户区便剩下20450个盘块,每50个盘块为一组,一共可以分为409个组。
文件系统模拟实验(C-实验教材)
文件系统实验1.1实验目的和要求1.1.1实验目的通常把文件与管理信息资源的管理程序的集合称为文件系统,它是操作系统中负责存取和管理信息资源的模块,采用统一的方法管理用户信息和系统信息的存储、检索、更新、共享和保护,并为用户提供一套行之有效的文件使用及操作方法。
本实验利用高级语言编写程序模拟文件系统,了解文件系统的基本结构和文件的各种操作方法,加深理解文件系统的内部功能及内部实现,从而帮助学生对各种文件操作命令的实质内容和执行过程有比较深入的了解。
1.1.2实验要求1.采用高级语言编写程序模拟文件系统,文件系统采用多级目录结构,实现对文件和目录的创建、删除、重命名、变更权限、显示文件内容、修改文件内容等操作。
2.撰写实验报告,报告应包含以下内容:(1)实验目的;(2)实验内容;(3)设计思路;(4)程序流程图;(5)程序中主要数据结构和函数说明;(6)带注释的源程序代码;(7)程序运行结果及分析(8)实验收获与体会1.2预备知识1.2.1文件和文件系统1.文件概念现代计算机系统中都配置了外存,大量的程序和数据以文件的形式存放在外存。
如果由用户直接管理文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且多用户环境下还必须能保持数据的安全性和一致性,这是用户不能胜任的。
因而,现代操作系统中都配备文件系统,以适应系统资源管理和用户使用信息的需要。
文件是指由创建者所定义的、具有文件名的一组相关元素的集合。
用户通过文件名就可对文件进行访问,文件名是由字母或数字组成的字母或数字串,其格式和长度都因系统而异。
操作系统提供文件系统的优点有:(1)便于用户使用。
(2)文件安全可靠。
(3)系统能有效利用存储空间,优化安排不同属主文件的位置。
(4)文件系统还能提供文件共享功能。
2.文件命名在不同的操作系统中对文件名的规定有所不同,文件名的格式和长度因系统而异。
一般来说,文件名由文件名和扩展名两部分组成,前者用于标识文件,后者用于区分文件类型,中间用“.”分割开来,它们都是字母或数字所组成的字母数字串。
操作系统实验---文件系统
实验报告实验题目:文件系统姓名:学号:课程名称:操作系统所在学院:信息科学与工程学院专业班级:计算机任课教师:实验项目名称文件系统一、实验目的与要求:1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及其内部实现。
2、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。
3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。
4、通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
二、实验设备及软件:一台PC(Linux系统)三、实验方法(原理、流程图)试验方法(1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
(2)用户创建文件,可以编号存储于磁盘上。
如file0,file1,file2…并以编号作为物理地址,在目录中登记。
文件系统功能流程图图1.文件系统总体命令分析图 2.登录流程图图 3. ialloc流程图图4.balloc流程图图5.密码修改流程图图6.初始化磁盘图 7.显示所有子目录 dir/ls 操作流程图图8.创建文件 creatfile 、创建目录 mkdir 流程图图9.改变当前路径 cd 操作流程图实验原理1.文件操作◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。
在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。
具体流程图查看第二节,系统流程图设计部分。
◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。
在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统试验班级:计科0801 姓名:韩伟伟学号:日期:2011/6/15实验六模拟实现文件系统一.实验目的通过模拟程序实现文件的建立、打开、删除、关闭、复制、读、写、查询等功能,了解文件系统实现的特点,掌握文件系统的各种功能实现方法。
二.实验属性设计三.实验内容模拟实现文件系统问题是一个经典的关于文件的处理问题,包括:实现文件的建立、打开、删除、关闭、复制、读、写、查询等功能。
设计思想如下:1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2.文件物理结构可采用显式链接或其他方法。
3.磁盘空闲空间的管理可选择位示图或其他方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
4.文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。
5.设计一个较实用的用户界面,方便用户使用。
要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建: create(4)文件的打开:open(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete(9)列出文件目录:dir(10)退出:logout四.设计思路1.本系统初始化了十个用户,每个用户初始化五个文件,最多可拥有十个文件,所以每个用户在此基础上可为自己再创建五个文件,也可以在删除文件后再创建。
2.系统使用create,open,read,write,close,delete,dir和exit来创建文件,打开文件,读文件,写文件,关闭文件,删除文件和显示文件。
3.程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。
另外,为打开文件设置了运行文件目录(AFD)。
4.为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。
模拟实现文件系统的主要流程图如下:五.实验报告1.写出你编写的C++程序。
#include "stdio.h"#include <stdlib.h>#include <conio.h>#include <string.h>#define getpch(type) (type*)malloc(sizeof(type))#define NULL 0#define UserNumber 10#define UserFNumber 10#define UserOFNumber 5struct fname{char fnamea[1];int flag;} fnameA[26]={'a',0,'b',0,'c',0,'d',0,'e',0,'f',0,'g',0,'h',0,'i',0,'j',0,'k',0,'l',0,'m',0,'n',0,'o',0,'p',0,'q',0,'r',0,'s',0,'t',0,'u',0,'v',0,'w',0,'x',0,'y',0,'z',0}; struct afd {char opname[10];/* 打开文件名*/int flag;char opfprotect[3];/* 打开保护码*/int rwpoint;/* 读写指针*/} AFD[UserOFNumber];/* 用户打开的文件*/typedef struct {char fname[10];/* 用户文件名*/int flag;/* 文件存在标志*/int fprotect[3];/* 文件保护码r\w\t */int flength;} ufd,UF[UserFNumber];/* 用户文件*/struct mdf {char uname[10];/* 用户名*/UF Udir;/* 用户文件目录*/} UFD[UserNumber];/* 用户*/void intFSystem(){int i,j,k,l;strcpy(UFD[0].uname,"a");strcpy(UFD[1].uname,"b");strcpy(UFD[2].uname,"c");strcpy(UFD[3].uname,"d");strcpy(UFD[4].uname,"e");strcpy(UFD[5].uname,"f");strcpy(UFD[6].uname,"g");strcpy(UFD[7].uname,"h");strcpy(UFD[8].uname,"i");strcpy(UFD[9].uname,"j");for(i=0;i<10;i++) {for(k=0;k<5;k++){do j=rand()%26; while(fnameA[j].flag);strcpy(UFD[i].Udir[k].fname,fnameA[j].fnamea);fnameA[j].flag=1;UFD[i].Udir[k].flength=rand()%2048+1;UFD[i].Udir[k].flag=1;UFD[i].Udir[k].fprotect[0]=rand()%2;UFD[i].Udir[k].fprotect[1]=rand()%2;UFD[i].Udir[k].fprotect[2]=rand()%2;}for(j=0;j<26;j++) fnameA[j].flag=0;}for(l=0;l<5;l++){strcpy(AFD[i].opname,"");AFD[l].flag=0;AFD[l].opfprotect[0]=0;AFD[l].opfprotect[1]=0;AFD[l].opfprotect[2]=0;AFD[l].rwpoint=0;}}void Open(int i){ int l,k,n;char ];for(l=0;l<5;l++) { if(!AFD[l].flag) break; }printf("请输入你想打开的文件名:");scanf("%s",file);for(n=0;n<5;n++) if(!strcmp(AFD[n].opname,[n].flag){printf("he opened!\n",;}for(k=0;k<10;k++) if(!strcmp(UFD[i].Udir[k].fname,[i].Udir[k].flag) { strcpy(AFD[l].opname,UFD[i].Udir[k].fname); AFD[l].opfprotect[0]=UFD[i].Udir[k].fprotect[0];AFD[l].opfprotect[1]=UFD[i].Udir[k].fprotect[1];AFD[l].opfprotect[2]=UFD[i].Udir[k].fprotect[2];AFD[l].flag=1;printf("文件已打开!\n");return;}printf("文件不存在!\n");return;}void Create(int i){ int k;for(k=0;k<10;k++) {if(!UFD[i].Udir[k].flag) break; }if(k>=10) {printf("一个用户不能拥有超过10个文件\n\n");return;}printf("请输入你想创建的文件名:");scanf("%s",UFD[i].Udir[k].fname);printf("请输入文件长度:");scanf("%d",&UFD[i].Udir[k].flength);printf("只读?(1 yes,0 no):");scanf("%d",&UFD[i].Udir[k].fprotect[0]);printf("可写?(1 yes,0 no):");scanf("%d",&UFD[i].Udir[k].fprotect[1]);printf("可执行?(1 yes,0 no):");scanf("%d",&UFD[i].Udir[k].fprotect[2]);UFD[i].Udir[k].flag=1;return;}void Delete(int i){char ]; int k;printf("请输入你想删除的文件名:");scanf("%s",file);for(k=0;k<10;k++) {if(UFD[i].Udir[k].flag&&!strcmp(UFD[i].Udir[k].fname,file)){printf("文件已删除!\n");UFD[i].Udir[k].flag=0;break;}else if(!UFD[i].Udir[k].flag&&!strcmp(UFD[i].Udir[k].fname,file))printf("文件不存在!\n");}return;}void Read(){ int l;char ];printf("请输入你想读的文件:");scanf("%s",file);for(l=0;l<5;l++) if(!strcmp(AFD[l].opname,[l].flag)if(AFD[l].opfprotect[0]){ printf("the read.\n"); return;}else {printf("cannot read!\n"); return;}if(l>=5) printf("文件尚未打开,请先打开文件\n");return;}void Write(){int l;char ];printf("请输入你想写的文件:");scanf("%s",file);for(l=0;l<5;l++) if(!strcmp(AFD[l].opname,[l].flag)if(AFD[l].opfprotect[1]){ printf(" the written.\n"); return;}else{ printf("cannot write !\n"); return;}if(l>=5) printf("文件尚未打开,请先打开文件\n");return;}void printUFD(int i){int k;printf("主文件目录:\n",UFD[i].uname);printf("用户名\t文件名\t可读可写可执行\t文件长度\n");for(k=0;k<10;k++){if(UFD[i].Udir[k].flag)printf("%s\t%s\t%d %d %d\t\t%dB\n",UFD[i].uname,UFD[i].Udir[k].fname,UFD[i].U dir[k].fprotect[0],UFD[i].Udir[k].fprotect[1],UFD[i].Udir[k].fprotect[2],UFD[i].Udir[k].flength);}}void printAFD(int i) { int l,k;if (!AFD[0].flag&&!AFD[1].flag&&!AFD[2].flag&&!AFD[3].flag&&!AFD[4].flag){printf("当前没有运行的文件!\n");return;}else{printf("运行文件目录:\n");printf("文件名\t可读可写可执行\n");for(l=0;l<5;l++){for(k=0;k<10;k++){if(!strcmp(UFD[i].Udir[k].fname,AFD[l].opname)&&UFD[i].Udir[k].flag&&AFD[l].flag){ break ;}else continue;}if(!strcmp(UFD[i].Udir[k].fname,AFD[l].opname)&&UFD[i].Udir[k].flag&&AFD[l].flag) { printf("%s\t%d %d %d\n",AFD[l].opname,AFD[l].opfprotect[0],AFD[l].opfprot ect[1],AFD[l].opfprotect[2]); }}}}void Close(){ int l;char ];printf("请选择文件:");scanf("%s",file);for(l=0;l<5;l++)if(!strcmp(AFD[l].opname,[l].flag) {AFD[l].flag=0;printf("the close\n");return;}if(l>=5) printf("文件打开失败!\n");return;}void main(){ int i,n=0;char m[10];char login[10];intFSystem();printf(" 欢迎使用\n");printf("1.本系统模拟文件管理2.系统已初始化10个用户,\n用户名分别是a~j,每个用户已分配五个文件\n");printf("**本系统的命令包括如下:\n");printf("**创建文件(create)\n");printf("**删除文件(delete)\n");printf("**打开文件(open)\n");printf("**关闭文件(close)\n");printf("**读取文件(read)\n");printf("**编写文件(write)\n");printf("**显示文件目录(printufd)\n");printf("**显示打开文件目录(dir)\n");printf("**退出(exit)\n");lgin: printf("请输入用户名(a~j):");scanf("%s",login);if(!strcmp(login,"exit")) return;for(i=0;i<10;i++){ if(!strcmp(UFD[i].uname,login)) break;}if(i>=10){ printf("该用户名不存在!"); goto lgin; }printUFD(i);for(;n!=1;){printf("请输入命令:");scanf("%s",&m);if(strcmp(m,"create")==0) Create(i);else if(strcmp(m,"delete")==0) Delete(i);else if(strcmp(m,"open")==0) Open(i);else if(strcmp(m,"close")==0) Close();else if(strcmp(m,"read")==0) Read();else if(strcmp(m,"write")==0) Write();else if(strcmp(m,"printufd")==0) printUFD(i);else if(strcmp(m,"dir")==0) printAFD(i);else if(strcmp(m,"exit")==0) n=1;else printf("出错\n");}printf("Saving....\n");printUFD(i);getch();return;}用户登录时的界面如下:用户对此模拟系统进行各项操作的界面如下:2.描述文件系统的实现原理本系统是模拟实现多用户多目录的文件系统(10个用户),在系统出现登录后 ,输入用户名,在用户登录系统后,可建立文件卷,将用户输入的文件保存在指定的文件中。