ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:18.74KB ,
资源ID:4545488      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4545488.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(简单文件系统的实现实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

简单文件系统的实现实验报告.docx

1、简单文件系统的实现实验报告操作系统课程设计报告简单文件系统的实现专业: 班级: 姓名: 学号: 老师: 一、课程设计的目的1. 通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部数据结构、功能以及实现过程的理解。二、 课程设计要求1. 在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的单用户单任务系统中的文件系统。在退出该文件系统的使用时,应将该虚拟文件系统以一个Windows 文件的方式保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。2文件存储空间的分配可采用显式链接分配或其他的办法。3空闲磁盘空间的管理可选择

2、位示图或其他的办法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,那么可以将位示图合并到FAT中。文件目录结构采用多级目录结构。为了简单起见,可以不使用索引结点,其中的每个目录项应包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。要求提供以下有关的操作命令:my_format:对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。my_mkdir:用于创建子目录。my_rmdir:用于删除子目录。my_ls:用于显示目录中的内容。my_cd:用于更改当前目录。my_create:用于创建

3、文件。my_open:用于打开文件。my_close:用于关闭文件。my_write:用于写文件。my_read:用于读文件。my_rm:用于删除文件。my_exitsys:用于退出文件系统。三、程序的设计细想和框图1打开文件函数fopen() (1)格式:FILE *fopen(const char *filename,const char *mode) (2)功能:按照指定打开方式打开指定文件。(3)输入参数说明:filename:待打开的文件名,如果不存在就创建该文件。mode: 文件打开方式,常用的有:r:为读而打开文本文件(不存在则出错)。w:为写而打开文本文件(若不存在则创建该文件

4、;反之,则从文件起始位置写,原内容将被覆盖)。a:为在文件末尾添加数据而打开文本文件。(若不存在则创建该文件;反之,在原文件末尾追加)。r+:为读和写而打开文本文件。(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变) 。w+:首先建立一个新文件,进行写操作,随后可以从头开始读。(若文件存在,原内容将全部消失) 。a+:功能与a相同;只是在文件末尾添加新的数据后,可以从头开始读。 另外,上述模式字符串中都可以加一个“b”字符,如rb、wb、ab、rb+、wb+、ab+等组合,字符“b”表示fopen() 函数打开的文件为二进制文件,而非纯文字文件。(4)输出:一个指向FILE类型的

5、指针。2关闭文件函数fclose()(1)格式:int fclose(FILE * stream);(2)功能:用来关闭先前fopen()打开的一个文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。(3)输入参数说明: stream:指向要关闭文件的指针,它是先前执行fopen()函数的返回值。(4)输出:若关闭文件成功则返回0;有错误发生时则返回EOF并把错误代码存到errno。3读文件函数fread()(1)格式:size_t fread( void *buffer, size_t size, size_t count, FILE *stream );(2)功能:读二进

6、制文件到内存。(3)输入参数说明: buffer:用于存放输入数据的缓冲区的首地址; stream:使用fopen()打开的文件的指针,用于指示要读取的文件; size: 每个数据块的字节数; count: 要读入的数据块的个数; size*count:表示要求读取的字节数。(4)输出:实际读取的数据块的个数。4写文件函数fwrite() (1)格式:size_t fwite(const void *buffer,size_t size,size_t count,FILE *stream); (2)功能:将数据写到二进制文件中。(3)输入参数说明:buffer:用于存放输出数据的缓冲区的首地址

7、; stream:使用fopen()打开的文件的指针,用于指示要写出的文件; size: 每个数据块的字节数; count: 要写出的数据块的个数; size*count:表示要求写出的字符数。(4)输出:实际写出的数据块的个数。5判断文件结束函数feof ()(1)格式:int feof(FILE * stream)(2)功能:用来判断是否已读取到文件末尾。(3)输入参数说明:stream:使用fopen()打开的文件的指针,用于指示要判断的文件。(4)输出:如果已读到文件尾则返回非零值,其他情况返回0。6 主要函数功能实现:int format(); atherBlockNum = -1;

8、ype=GENERAL; ;struct dirFile/*-目录文件结构-*/ struct FCB fcbBlockFcbCount; void init(int _FatherBlockNum,int _CurrentBlockNum,char *name)name,name); atherBlockNum=_FatherBlockNum; fcb0.currentBlockNum=_CurrentBlockNum; fcb0.type=DIRECTORY; atherBlockNum=_CurrentBlockNum; ype=Zero; ype=DIRECTORY & strcmp(

9、dir-fcbi.fname,sonfname)=0 ) printf(该文件夹下已经有同名的文件夹存在了!n); return 0; for(i = 1;i BlockFcbCount; i+)ype=Zero) break; if(i = BlockFcbCount) printf(该目录已满!请选择新的目录下创建!n); return 0; temp = i; for(i = 3;i FAT1i = 0) break; if(i = BlockCount) printf(磁盘已满!n); return 0; iFAT=i; /*-接下来进行分配-*/ osPoint-FAT1iFAT=o

10、sPoint-FAT2iFAT = 2; name,sonfname); dir-fcbtemp.type=DIRECTORY; dir-fcbtemp.fatherBlockNum=current; dir-fcbtemp.currentBlockNum=iFAT; ype=DIRECTORY & strcmp(dir-fcbi.fname,sonfname)=0) break; temp=i; if(i=BlockFcbCount) printf(当前目录下不存在该子目录!n); return 0; j = dir-fcbtemp.currentBlockNum; struct dirFi

11、le *sonDir; ype!=Zero) printf(该文件夹为非空文件夹,为确保安全,请清空后再删除!n); return 0; /*开始删除子目录操作*/ osPoint-FAT1j = osPoint-FAT2j=0; nitialize(); ype = Zero & isFound = 0) emptyNum = i; isFound = 1; else if(dir-fcbi.type=GENERAL & strcmp(dir-fcbi.fname,name)=0 ) printf(无法在同一目录下创建同名文件!n); return 0; if(emptyNum = 0) p

12、rintf(已经达到目录项容纳上限,无法创建新目录!n); return 0; for(i = 3;ifcbemptyNum.type=GENERAL; dir-fcbemptyNum.fatherBlockNum=current; dir-fcbemptyNum.currentBlockNum=iFAT; dir-fcbemptyNum.size =0; char* p = osPoint-dataiFAT -3; memset(p,4,BlockSize); printf(在当前目录下创建文本文件成功!n); return 1;/*-查询子目录-*/int listshow() int i

13、,DirCount=0,FileCount=0; ype=GENERAL) n,dir-fcbi.fname); if(dir-fcbi.type=DIRECTORY) n,dir-fcbi.fname); printf(n该目录下共有 %d 个文本文件, %d 个文件夹nn,FileCount,DirCount); return 1;/*-在当前目录下删除文件-*/int delfile(char *name) int i,temp,j; ype=GENERAL & strcmp(dir-fcbi.fname,name)=0) break; if(i = BlockFcbCount) pri

14、ntf(当前目录下不存在该文件!n); return 0; int k; for(k=0;kf k.type = GENERAL)& (strcmp(openlist-f k.fname,name)=0) if(openlist-fk.fatherBlockNum = current) break; else printf(该文件未在当前目录下!n); return 0; if(k!=OPEN_MAX) close(name); urrentBlockNum ; nitialize(); )=0) if(current=2) printf(你现已经在根目录下!n); return 0; cur

15、rent = dir-fcb0.fatherBlockNum ; currentPath = (0,() - strlen(dir-fcb0.fname )-1); return 1; /*进入子目录*ype=DIRECTORY&strcmp(dir-fcbi.fname,sonfname)=0) temp=i; break; if(i=BlockFcbCount) printf(不存在该目录!n); return 0; urrentBlockNum ; currentPath = currentPath+dir-fcb temp.fname +; printf(进入当前目录下的子目录成功!n

16、); return 1;int exit()name,name)=0 ) if(openlist-fi.fatherBlockNum =current) break; else printf(该文件处于打开列表中,本系统只能改写当前目录下文件!n); return 0; if(i=OPEN_MAX) printf(该文件尚未打开,请先打开后写入信息!n); return 0; int active=i; int fileStartNum = openlist-factive.currentBlockNum - 3 ; startPoint = osPoint-datafileStartNum;

17、 endPoint = osPoint-datafileStartNum + 1; printf(请输入文本以Ctrl D号结束:t); char input; while(input=getchar()!=4) if(startPoint fi.fatherBlockNum =current) break; else printf(该文件处于打开列表中,本系统只能阅读当前目录下文件!n); return 0; if(i=OPEN_MAX) printf(该文件尚未打开,请先打开后读取信息!n); return 0; int active=i;urrentBlockNum - 3 ; star

18、tPoint = osPoint-datafileStartNum; endPoint = osPoint-datafileStartNum + 1; printf(该文件的内容为: ); while(*startPoint)!=4& (startPoint f i.fname,file)=0 &openlist-fi.fatherBlockNum = current) printf(该文件已经被打开!n); return 0; n); return 0; ype=GENERAL & strcmp(dir-fcbi.fname,file)=0 ) FcbIndex=i; break; if(i

19、=BlockFcbCount) printf(当前目录下不存在该文件!n); return 0; ype = GENERAL)& (strcmp(openlist-f i.fname,file)=0) if(openlist-fi.fatherBlockNum = current) break; else printf(该文件已打开,但未在当前目录下,无法关闭!n); return 0; if(i=OPEN_MAX) printf(该文件未在打开列表中!n); return 0; int active=i; openlist-files -; openlist-factive.initiali

20、ze(); OpenFileCount-; printf(该文件已关闭!n); return 1;int main() printf( Welcome To My Operate System Of File(FAT) n); printf(n 以下是使用说明书:n); n); printf( exit :安全退出该文件系统,保存信息. n); printf( mkdir dirname :创建子目录. n); printf( rmdir dirname :删除子目录. n); printf( ls dirname :显示当前目录下信息. n); printf( cd dirname :更改当

21、前目录. n); printf( create filename :创建一个新文件,并且打开. n); printf( write filename :选择一个打开的文件写入信息 n); printf( read filename :选择一个打开的文件读取信息. n); printf( rm filename :删除文件. n); printf( open filename :打开文件. n); printf( close filename :关闭文件. n); printf(nn); openlist=new OPENLIST;.n); format(); printf(初始化已经完成,现在

22、可以进行操作了!nn); while(1) coutcmd; if(cmd=format) format(); else if(cmd=mkdir) cincommand; mkdir(command); else if(cmd=rmdir) cincommand; rmdir(command); else if(cmd=ls) listshow(); else if(cmd=cd) cincommand; changePath(command); else if(cmd=create) cincommand; create(command); else if(cmd=write) cinco

23、mmand; write(command); else if(cmd=read) cincommand; read(command); else if(cmd=rm) cincommand; delfile(command); else if(cmd=open) cincommand; open(command); else if(cmd=close) cincommand; close(command); else if(cmd=exit) exit(); break; else cout无效指令,请重新输入:endl; printf(Thank you for using my file system!n); return 1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1