文件系统课程设计报告

合集下载

文件系统设计课程设计

文件系统设计课程设计

文件系统设计课程设计一、教学目标本课程的教学目标是使学生掌握文件系统设计的基本原理和方法,培养学生分析和解决文件系统相关问题的能力。

具体分为以下三个部分:1.知识目标:学生需要掌握文件系统的概念、组成、基本操作和存储分配策略等基本知识;了解不同类型的文件系统结构及其优缺点;熟悉文件系统的性能评价指标和优化方法。

2.技能目标:学生能够运用所学知识分析和设计简单的文件系统;具备使用文件系统相关工具软件进行维护和优化的能力;能够阅读和理解文件系统相关的技术文档。

3.情感态度价值观目标:培养学生对文件系统的兴趣,使其认识到文件系统在计算机系统中的重要性;培养学生严谨的科学态度和良好的团队合作精神。

二、教学内容本课程的教学内容主要包括以下几个部分:1.文件系统概述:介绍文件系统的基本概念、作用、发展历程和分类。

2.文件系统的组成:讲解文件系统的结构、组件及其功能,包括文件、目录、存储器等。

3.文件系统的实现:深入剖析文件系统的核心实现技术,如文件分配策略、目录结构、文件访问控制等。

4.文件系统的性能评价:介绍文件系统的性能评价指标,如读写速度、空间利用率等,并讲解优化方法。

5.常见文件系统分析:对比分析不同类型的文件系统结构及其适用场景,如FAT32、NTFS、ext4等。

6.文件系统的维护与优化:讲解如何使用文件系统工具软件进行维护和优化,以提高系统性能。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学:1.讲授法:教师通过讲解、演示等方式,向学生传授文件系统的基本概念、原理和实现方法。

2.案例分析法:教师通过分析实际案例,引导学生运用所学知识解决实际问题。

3.实验法:学生通过动手实验,加深对文件系统结构、操作和维护的理解。

4.讨论法:学生在课堂上相互交流、讨论,分享学习心得和经验,提高团队合作能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用国内外优秀教材,如《计算机操作系统》、《文件系统设计与实现》等。

操作系统课程设计二级文件系统

操作系统课程设计二级文件系统

操作系统课程设计报告专业:计算机信息处理学号:09103408姓名:纪旻材提交日期:2011-12-28【设计目的】1. 课程设计目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。

2. 结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。

3. 通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力【设计内容】1、delete 删除文件2、open 打开文件3、close 关闭文件4、write 写文件【实验环境】Windows7系统Visual studio 2010【相关知识综述】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。

另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。

首先应确定文件系统的数据结构:主目录、子目录及活动文件等。

主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。

用户创建的文件,可以编号存储于磁盘上。

如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。

【设计思路】1 主要数据结构#define MAXNAME 25 /*the largest length ofmfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child每个用户名下最多有50个文件*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ typedef struct/*the structure of OSFILE定义主文件*/{int fpaddr; /*file physical address*/int flength; /*file length*/int fmode; /*file mode:0-Read Only;1-WriteOnly;2-Read and Write; 3-Protect;*/char fname[MAXNAME]; /*file name*/} OSFILE;typedef struct/*the structure of OSUFD定义用户文件目录*/{char ufdname[MAXNAME]; /*ufd name*/OSFILE ufdfile[MAXCHILD]; /*ufd own file*/}OSUFD;typedef struct/*the structure of OSUFD'LOGIN定义登陆*/{char ufdname[MAXNAME]; /*ufd name*/char ufdpword[8]; /*ufd password*/} OSUFD_LOGIN;typedef struct/*file open mode定义操作方式*/{int ifopen; /*ifopen:0-close,1-open*/int openmode; /*0-read only,1-write only,2-read and write,3-initial*/}OSUFD_OPENMODE;2 主要函数void LoginF(); /*LOGIN FileSystem*/void DirF(); /*Dir FileSystem*/void CreateF(); /*Create File*/void DeleteF(); /*Delete File*/void ModifyFM(); /*Modify FileMode*/void OpenF(); /*Open File*/void CloseF(); /*Close File*/void ReadF(); /*Read File*/void WriteF(); /*Write File*/void QuitF(); /*Quit FileSystem*/void CdF(); /*Change Dir*/void help();【主要程序段】1 Delete函数void DeleteF() /*Delete File*/{ char fname[MAXNAME],str[50],str1[50];int i,k,j;int fpaddrno1;if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) /*无法删除主目录的文件*/{printf("\ convert to ufd dir before delete.\n");wgetchar=1;}if (strcmp(strupr(dirname),strupr(username))!=0) /*无法删除非自己目录的文件*/{printf("\ can only modify filemode in yourself dir.\n");wgetchar=1;}else{printf("\nPlease input FileName:");gets(fname);fopen==1)/*文件打开时无法删除*/{printf("\nError.\'%s\' is in open status. Close it before delete.\n",fname);wgetchar=1;}else{if(ufd[k]->ufdfile[i].fmode==3)/*被保护的文件无法删除*/{printf("\nError.\'%s\' is in protect status. Close it before delete.\n",fname);wgetchar=1;}else{fpaddrno1=ufd[k]->ufdfile[i].fpaddr;xt");remove(str);n",fname);wgetchar=1;}}}else\'%s\' dose not exist.\n",fname);wgetchar=1;}}}2 Open函数void OpenF() /*Open File*/{char fname[MAXNAME];int i,k,j;if (strcmp(strupr(dirname),strupr(username))!=0) /*在自己的目录里才能打开*/{printf("\ can only open in yourself dir.\n");wgetchar=1;}else{k=ExistD(username);for(j=0;j<fcount[k];j++){printf("%15s",ufd[k]->ufdfile[j].fname);}printf("\nPlease input FileName:");gets(fname);fopen==1)'%s\' is in openstatus.\n",fname);wgetchar=1;}else{ifopen[k][i].ifopen=1;mode==0)/*根据文件的模式设置打开模式*/{ ifopen[k][i].openmode=0;}else if(ufd[k]->ufdfile[i].fmode==1){ifopen[k][i].openmode=1;}else if(ufd[k]->ufdfile[i].fmode==2){ifopen[k][i].openmode=2;}else ifopen[k][i].openmode=3;printf("\n\'%s\' is openedsuccessfully\n",fname);wgetchar=1;}}else\'%s\' dose not exist.\n",fname);wgetchar=1;}}}3 Close函数void CloseF() /*Close File*/{char fname[MAXNAME];int i,k,j;if (strcmp(strupr(dirname),strupr(username))!=0) /*不在自己的目录里没法进行*/{printf("\ can only close file in yourself dir.\n");wgetchar=1;}else{k=ExistD(username);for(j=0;j<fcount[k];j++)/*列出已经打开的文件*/ {if(ifopen[k][j].ifopen==1)name);}printf("\nPlease input FileName:");gets(fname);fopen=0;/*关闭文件*/printf("\n \'%s\' closed successfully\n",fname);wgetchar=1;}else\'%s\' dose not exist.\n",fname);wgetchar=1;}}}4 Write函数void WriteF() /*Write File*/{int i,k,n=0;int length;char fname[MAXNAME],values[1000];char str[255],str1[255],c;if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) n");wgetchar=1;return;}printf("\nCaution:Open file first\n");printf("Opened File(s) List:\n");k=ExistD(dirname);fopen==1)name);n++;}if((n%4==0)&&(n!=0)) printf("\n");}printf("\n%d files openned.\n",n);if (n==0) wgetchar=1;fopen==1)penmode==1)||(ifopen[k][i].openmode==2))paddr,str,10);xt");fp_file=fopen(str,"ab");length=ufd[k]->ufdfile[i].flengt h+length;n",ufd[k]->ufdfile[i].flength);printf("\n\nYou have write filesuccessfully!!");fclose(fp_file);wgetchar=0;}else if(ifopen[k][i].openmode==0)'%s\' has been opened with READ ONLY mode. It isn\'t write.\n",fname);wgetchar=1;}else'%s\' has been opened with PROTECT mode. It isn\'t write.\n",fname);wgetchar=1;}}else '%s\' is in closing status. Please open it before write\n",fname);wgetchar=1;}}else \'%s\' does not exist.\n",fname);wgetchar=1;}}}【程序流程设计】1总的功能结构图:2部分子模块程序流程图(1)打开命令的程序流程图:(2)关闭命令的程序流程图:(3)写命令的程序流程图:(4)删除命令的程序流程图:【测试结果】1 删除文件2 打开的文件不能删除3 打开文件,其中已经打开的文件不能再次打开3 关闭文件4 写文件,其中只有打开了文件才能写入5 写文件6 只读文件和保护文件不能写入7 其他函数【参考文献】计算机操作系统,西安电子科技大学出版社,方敏主编,部分函数含义引用于【源程序清单】#include""#include""#include""#include""#define MAXNAME 25 /*the largest length ofmfdname,ufdname,filename*/#define MAXCHILD 50 /*the largest child每个用户名下最多有50个文件*/#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ typedef struct/*the structure of OSFILE定义主文件*/{int fpaddr; /*file physical address*/int flength; /*file length*/int fmode; /*file mode:0-Read Only;1-WriteOnly;2-Read and Write; 3-Protect;*/char fname[MAXNAME]; /*file name*/} OSFILE;typedef struct/*the structure of OSUFD定义用户文件目录*/{char ufdname[MAXNAME]; /*ufd name*/OSFILE ufdfile[MAXCHILD]; /*ufd own file*/}OSUFD;typedef struct/*the structure of OSUFD'LOGIN定义登陆*/ {char ufdname[MAXNAME]; /*ufd name*/char ufdpword[8]; /*ufd password*/} OSUFD_LOGIN;typedef struct/*file open mode定义操作方式*/{int ifopen; /*ifopen:0-close,1-open*/int openmode; /*0-read only,1-write only,2-read and write,3-protect*/}OSUFD_OPENMODE;void LoginF(); /*LOGIN FileSystem*/void DirF(); /*Dir FileSystem*/void CreateF(); /*Create File*/void DeleteF(); /*Delete File*/void ModifyFM(); /*Modify FileMode*/void OpenF(); /*Open File*/void CloseF(); /*Close File*/void ReadF(); /*Read File*/void WriteF(); /*Write File*/void QuitF(); /*Quit FileSystem*/void CdF(); /*Change Dir*/void help();char *rtrim(char *str); /*remove the trailing blanks.*/char *ltrim(char *str); /*remove the heading blanks.*/void InputPW(char *password); /*input password,use '*' replace*/int ExistD(char *dirname); /*Whether DirNameExist,Exist-i,Not Exist-0*/int WriteF1(); /*write file*/int ExistF(char *filename); /*Whether FileNameExist,Exist-i,Not Exist-0*/void SetPANo(int RorW); /*Set physical address num*/int FindPANo(); /*find out physical address num*/int ucount=0; /*the count of mfd's ufds用户数*/int fcount[MAXCHILD]; /*the count of ufd's files子文件数*/ int loginsuc=0; /*whether login successfully登陆成功*/char username[MAXNAME]; /*record login user's name22用户名*/char dirname[MAXNAME];/*record current directory使用的用户目int fpaddrno[MAX]; /*record file physical address num物理地址号,存放自己所创建的所有文件的地址*/int wgetchar; /*whether getchar()*/OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/OSUFD_LOGIN ufd_lp;;QuitF();exit(0);break;case 10:clrscr();choiceend=1;break;case 11:CdF();choiceend=1;break;;}char *rtrim(char *str) /*remove the trailing blanks.去掉登陆用户名的尾空格*/{int n=strlen(str)-1;while(n>=0)if(*(str+n)!=' '){*(str+n+1)='\0';break;}else n--;}if (n<0) str[0]='\0';return str;}char *ltrim(char *str) /*remove the heading blanks.去掉登陆用户名的头空格*/{strrev(str);name),strupr(filename))==0)exist=1;break;}if (exist) return(i);else return(-1);}int FindPANo() /*find out physical address num*/ {int i;for(i=0;i<MAX;i++)if (fpaddrno[i]==0){fpaddrno[i]=1;break;if (i<MAX) return(i);else return(-1);}int WriteF1() /*write file*/{int length=0;char c;printf("Please input text(\'#\' stands for end):\n");while((c=getchar())!='#'){fprintf(fp_file,"%c",c);if (c!='\n') length++;}fprintf(fp_file,"\n");fclose(fp_file);return(length);}void LoginF() /*LOGIN FileSystem登陆函数*/{charloginame[MAXNAME],loginpw[9],logincpw[9],str[50];xt");ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));fopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLogin successful! Welcome to this FileSystem\n\n");loginsuc=1;return;}else Try Again(Y/N):");gets(a);ltrim(rtrim(a));if (strcmp(strupr(a),"Y")==0){loginsuc=0;flag=0;}else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}}}}else/*user not exist*/{printf("New Password(<=8):");InputPW(loginpw); /*input new password,use '*' replace*/printf("\nConfirm Password(<=8):"); /*input new password,use '*' replace*/InputPW(logincpw);if (strcmp(loginpw,logincpw)==0)xt");if((fp_ufd=fopen(str,"rb"))==NULL){fp_ufd=fopen(str,"wb");fclose(fp_ufd);}fp_mfd=fopen("d:\\osfile\\","rb");for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j ++){strcpy(str,"d:\\osfile\\");strcat(str,;strcat(str,".txt");ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));strcpy(ufd[j]->ufdname,strupr);fp_ufd=fopen(str,"rb");for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_uf d)!=0;i++,fcount[j]++)fopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf("\n\nLogin Successful! Welcome to this System\n\n");loginsuc=1;return;}else Try Again(Y/N):");gets(a);ltrim(rtrim(a));if (strcmp(strupr(a),"Y")==0){loginsuc=0;flag=0;}else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;}}}}}}void DirF() /*Dir FileSystem主目录*/{int i,j,count=0;char sfmode[25],sfpaddr[25],str[25];clrscr();if (strcmp(strupr(ltrim(rtrim(dirname))),"")!=0)");getch();clrscr();printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddres s","FileLength","Type","FileMode");}itoa(ufd[j]->ufdfile[i].fpaddr,str,10);mode==0) strcpy(sfmode,"Read Only");else if(ufd[j]->ufdfile[i].fmode==1)strcpy(sfmode,"Write Only");elseif(ufd[j]->ufdfile[i].fmode==2)strcpy(sfmode,"Read And Write");else strcpy(sfmode,"Protect");printf("%14s%16s%14d%10s%18s\n",ufd[j]->ufdfile[i].fname ,sfpaddr,ufd[j]->ufdfile[i].flength,"<FILE>",sfmode);}printf("\n %3d file(s)\n",fcount[j]);}else.");getch();clrscr();printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type" );}printf("%14s%18d%8s\n",ufd[i]->ufdname,fcount[i],"<UFD>" );count=count+fcount[i];}printf("\n %3d dir(s),%5d file(s)\n",ucount,count);}}void CreateF() /*Create File*/{int fpaddrno,flag=1,i;char fname[MAXNAME],str[50],str1[50],a[25];char fmode[25];if (strcmp(strupr(dirname),strupr(username))!=0)You must create file in your own dir.\n");wgetchar=1;}else{printf("\nPlease input FileName:");gets(fname);ltrim(rtrim(fname));if (ExistF(fname)>=0){printf("\nError. Name \'%s\' has alreadyexisted.\n",fname);wgetchar=1;}else{printf("Please input FileMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):");gets(fmode);ltrim(rtrim(fmode));if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strc mp(fmode,"2")==0)||(strcmp(fmode,"3")==0)){fpaddrno=FindPANo();if (fpaddrno>=0)name,fname);paddr=fpaddrno;ufd[i]->ufdfile[fcount[i]].fmode=atoi(fmode);ifopen[i][fcount[i]].ifopen=0;ifopen[i][fcount[i]].openmode=4;strcpy(str,"d:\\osfile\\file\\file");itoa(fpaddrno,str1,10);strcat(str,str1);strcat(str,".txt");fp_file=fopen(str,"wb");fclose(fp_file);fcount[i]++;while(flag){printf("Input text now(Y/N):");gets(a);ltrim(rtrim(a));ufd[i]->ufdfile[fcount[i]-1].flength=0;if(strcmp(strupr(a),"Y")==0){fp_file=fopen(str,"wb+");length=WriteF1();flag=0;}else if(strcmp(strupr(a),"N")==0){flag=0;wgetchar=1;}}printf("\n\'%s\' has been created successfully!\n",fname);}else{printf("\nFail!No Disk Space. Please format your disk.\n");wgetchar=1;}}else{printf("\nError. FileMode\'s Range is 0-3\n");wgetchar=1;}}}}。

操作系统课程设计文件管理系统

操作系统课程设计文件管理系统

操作系统课程设计文件管理系统1. 引言文件管理是操作系统中的一个重要模块,负责对计算机中的文件进行管理和组织。

在操作系统课程设计中,设计一个文件管理系统是一个很有挑战性的任务,需要考虑到文件的创建、打开、读取、写入、删除等功能,并且要确保文件的安全性和可靠性。

本文将详细介绍文件管理系统的设计与实现。

2. 需求分析为了满足用户对文件管理的需要,我们需要对文件管理系统的需求进行分析。

在这个文件管理系统中,用户应该能够执行以下操作:•文件的创建和命名•文件的打开和关闭•文件的读取和写入•文件的删除和修改•文件的搜索和查找除此之外,还要考虑到对文件权限的管理,可以设置不同用户对文件的不同访问权限,以保障文件的安全性。

3. 概要设计概要设计是对文件管理系统的整体架构和功能进行规划和设计。

文件管理系统可以采用层次结构的设计方式,分为用户界面、文件管理模块和存储管理模块。

3.1 用户界面用户界面是用户与文件管理系统进行交互的接口,可以通过命令行或者图形界面来实现。

在用户界面中,用户可以输入相关指令来执行对文件的操作,如创建文件、打开文件、读取文件等。

3.2 文件管理模块文件管理模块是文件管理系统的核心模块,负责对文件进行创建、打开、读取、写入、删除等操作。

在文件管理模块中,需要维护一个文件目录表来记录文件的基本信息,如文件名、文件大小、文件权限等。

还需要考虑到文件的分配和回收,可以使用位示图等方式进行实现。

3.3 存储管理模块存储管理模块负责对文件进行存储和管理,包括磁盘空间的分配和回收。

在存储管理模块中,可以采用文件分配表或者索引节点进行存储方式的选择。

4. 详细设计在详细设计阶段,需要对概要设计中的每个模块进行详细设计,并确定各个模块之间的接口和数据结构。

4.1 用户界面设计用户界面设计可以采用命令行方式进行实现。

用户可以通过命令输入来执行相应的文件管理操作。

可以设计一系列命令,如create用于创建文件,open用于打开文件,read用于读取文件等。

文件管理linux课程设计

文件管理linux课程设计

文件管理linux课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。

知识目标要求学生掌握Linux操作系统的基本概念、文件管理的原理和常用命令。

技能目标要求学生能够熟练使用Linux命令行进行文件管理,包括文件创建、删除、移动、复制、权限设置等操作。

情感态度价值观目标要求学生培养对计算机科学的兴趣,提高自主学习和解决问题的能力。

通过本课程的学习,学生将了解Linux操作系统的特点和应用场景,掌握文件管理的基本原理和常用命令,培养良好的计算机操作习惯和自主学习能力。

二、教学内容本课程的教学内容主要包括Linux操作系统的基本概念、文件管理的原理和常用命令。

首先,介绍Linux操作系统的发展历程、特点和应用场景,使学生对Linux有一定的了解。

然后,讲解文件管理的基本原理,包括文件系统的结构、文件权限和文件属性等。

接着,介绍常用文件管理命令,如创建、删除、移动、复制、权限设置等,并通过实际操作演示这些命令的使用方法。

教学内容将按照以下大纲进行安排:1.Linux操作系统简介2.文件系统结构3.文件权限和属性4.常用文件管理命令5.文件操作实战演练三、教学方法本课程将采用讲授法、讨论法、案例分析法和实验法等多种教学方法。

首先,通过讲授法向学生传授Linux操作系统的基本概念和文件管理的原理。

然后,通过讨论法引导学生进行思考和交流,提高学生对文件管理命令的理解和应用能力。

接着,通过案例分析法分析实际问题,让学生学会如何运用文件管理命令解决问题。

最后,通过实验法让学生亲自动手操作,巩固所学知识,提高实际操作能力。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。

教材将提供Linux操作系统的基本概念和文件管理的原理,参考书将提供更深入的知识和实用技巧。

多媒体资料将包括PPT演示和视频教程,帮助学生更好地理解和掌握知识。

实验设备将用于让学生亲自动手操作,提高实际操作能力。

文件系统演示课程设计

文件系统演示课程设计

文件系统演示课程设计一、课程目标知识目标:1. 让学生了解文件系统的基本概念,掌握文件的组织、存储和检索方式。

2. 使学生掌握不同类型的文件系统,如FAT32、NTFS等,以及它们的特点和适用场景。

3. 引导学生了解文件系统的安全性和权限设置,学会合理分配文件权限。

技能目标:1. 培养学生运用文件系统进行数据存储、管理和检索的能力。

2. 培养学生利用文件系统进行资源组织、共享和协作的能力。

3. 提高学生解决文件系统相关问题的能力,如文件丢失、磁盘空间不足等。

情感态度价值观目标:1. 培养学生对计算机科学技术的兴趣和求知欲,激发他们探索文件系统奥秘的热情。

2. 培养学生具有良好的信息素养,尊重知识产权,遵循法律法规,合理使用文件系统。

3. 培养学生具备团队协作精神,学会在文件系统管理和使用过程中与他人沟通、分享和合作。

课程性质:本课程为计算机科学与技术领域的基础课程,旨在帮助学生建立文件系统知识体系,提高实际操作能力。

学生特点:学生具备一定的计算机操作基础,对文件系统有初步了解,但缺乏系统深入的认识。

教学要求:结合学生特点,注重理论与实践相结合,以案例驱动、任务导向的教学方法,引导学生主动探究,提高综合运用能力。

通过本课程的学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。

二、教学内容1. 文件系统基本概念:文件、目录、磁盘空间分配、文件存储结构。

2. 文件系统的类型:FAT32、NTFS、EXT4等,以及它们的优缺点和适用场景。

3. 文件操作与管理:创建、删除、复制、移动、重命名文件和文件夹;文件属性和权限设置。

4. 文件系统的性能与优化:磁盘碎片整理、文件压缩、磁盘配额。

5. 文件系统安全与保护:访问控制、加密、备份与恢复。

6. 文件系统故障处理:文件丢失、磁盘损坏、系统错误等常见问题的解决方法。

教学内容安排与进度:第一课时:文件系统基本概念及类型介绍。

第二课时:文件操作与管理,如创建、删除、复制、移动文件和文件夹。

简单多用户文件系统_操作系统课程设计

简单多用户文件系统_操作系统课程设计
图6修改文件模块流程图
4.2.6锁定状态转换(lock)模块
图7锁定状态转换流程图
只支持在当前用户目录下进行操作,当文件处于锁定状态时,文件被系统进行读写保护,文件不能被删除,可以被读取、修改。只有当文件处于非锁定状态时,才能被删除。锁定状态的转换即对文件的锁定、非锁定状态之间的转换。锁定状态转换模块的算法流程图如图7所示。
4.2.3新建文件(create)模块
图4新建文件模块流程图
只支持在当前用户目录下创建文件,根据位示图找到一个未使用的文件块用来存放用户的文件信息,根据系统当前状态来构建一个文件系统元素放入到找到的文件块中,新创建的文件状态为关闭,同时更新位示图和文件索引。新建文件时要求输入文件名称,当文件名称不存在,即与当前用户文件目录下的文件不发生冲突时,继续接收用户提供的文件长度,当文件不发生越界则接受锁定状态,文件新建成功。新建文件模块算法流程图如上图4所示。
具有login (用户登录)
系统初始化(建文件卷、提供登录模块)
列出文件目录:dir
文件内容的查看:view
新建文件:create
删除文件:delete
修改文件:modify
锁定状态转换:lock
注销退出:logout
文件目录结构采用多用户目录结构,每个目录项包含文件名、大小、是否锁定、物理地址等信息,可以通过目录项实现对文件的读和写的保护。
3.功能描述
在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单多用户的文件系统。文件物理结构可采用显式链接或其他方法。磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
一个较实用的用户界面,方便用户使用。可提供以下相关文件操作:

文件管理课程设计报告

文件管理课程设计报告

操作系统课程设计报告姓名:xxx______学号:xxxxxxxxxxxx__专业年级:软件2班指导教师:__xx_2016年 3月1日1 概述目的:本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。

意义: 本系统是基于linux平台运行在终端上的虚拟二级文件管理系统。

模拟真正的文件管理系统,并采用用户登录机制对文件和文件夹进行创建,修改,删除的操作.对于文件夹而言,可以进行创建删除的操作;对于文件而言,可以创建,修改,删除.删除文件夹时,同时删除相应文件夹下的文件。

采用用户登录使得用户管理文件更方便,并形成了二级的文件管理模式.主要任务:为DOS系统设计一个简单的二级文件系统。

要求做到以下几点:①可以实现下列命令:login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件②列目录时要列出文件名、物理地址、保护码和文件长度. ③源文件可以进行读写保护(1)设计思路程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式。

其他操作包括新建用户、帮助、用户登入、用户登出、退出系统。

在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file。

p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容。

(2) 数据结构file结构体系统文件.数据结构:fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式 0。

只读;1.可写;2.可读写;3.保护、 fname[]char,文件名; filemode结构体文件状态数据结构:isopenint,文件当前状态,0。

文件查找系统课程设计

文件查找系统课程设计

文件查找系统课程设计一、教学目标本课程旨在让学生了解和掌握文件查找系统的基本原理和方法,培养学生运用文件查找系统解决实际问题的能力。

具体目标如下:1.知识目标:(1)了解文件查找系统的概念、功能和应用场景;(2)掌握文件查找系统的常用算法和数据结构;(3)熟悉文件查找系统的性能评估和优化方法。

2.技能目标:(1)能够运用文件查找系统解决实际问题;(2)具备编写简单文件查找算法的能力;(3)学会使用文件查找系统相关软件和工具。

3.情感态度价值观目标:(1)培养学生对文件查找系统的兴趣和好奇心;(2)培养学生团队协作和自主学习的精神;(3)培养学生关注文件查找系统在社会发展和个人生活中的价值。

二、教学内容本课程的教学内容主要包括以下几个部分:1.文件查找系统概述:介绍文件查找系统的概念、功能和应用场景,让学生了解文件查找系统在现实生活中的重要性。

2.文件查找算法:讲解常用的文件查找算法,如顺序查找、二分查找、哈希查找等,并通过实例分析让学生掌握算法的原理和实现。

3.文件查找数据结构:介绍文件查找系统中的常用数据结构,如数组、链表、树状数组等,并分析各种数据结构的优缺点。

4.文件查找系统性能评估与优化:讲解文件查找系统的性能评估指标,如时间复杂度、空间复杂度等,并介绍优化方法。

5.文件查找系统软件与工具:介绍常用的文件查找系统软件和工具,如Windows文件搜索、Linux文件查找命令等,并教授如何运用这些工具解决实际问题。

三、教学方法本课程采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性:1.讲授法:讲解文件查找系统的基本概念、原理和算法;2.讨论法:学生针对实际问题进行讨论,培养团队协作和自主学习的精神;3.案例分析法:通过分析实际案例,让学生掌握文件查找系统的应用;4.实验法:让学生动手编写文件查找算法,提高实际操作能力。

四、教学资源为实现课程目标,我们将采用以下教学资源:1.教材:《文件查找系统导论》;2.参考书:涉及文件查找系统相关领域的经典著作;3.多媒体资料:包括PPT、教学视频等,用于辅助讲解和演示;4.实验设备:计算机及相关软件,用于让学生动手实践。

操作系统课程设计文件系统

操作系统课程设计文件系统

操作系统课程设计:文件系统一、引言文件系统是操作系统中的一个重要组成部分,负责管理计算机存储设备上的文件和目录。

一个高效可靠的文件系统对于操作系统和用户来说都至关重要。

在操作系统课程中,设计一个文件系统是一项重要的任务,可以帮助学生深入了解文件系统的原理和实现细节。

本文档将介绍一个简单的文件系统设计,旨在帮助初学者理解文件系统的基本概念和工作原理。

我们将首先介绍文件系统的基本概念,然后讨论文件系统的设计思路和关键组成部分。

最后,我们将讨论如何实现和测试文件系统。

二、文件系统的基本概念文件系统是操作系统提供的一种存储管理机制,用于将文件组织成有层次的结构并提供对文件的访问和管理。

在一个文件系统中,文件被组织成目录(或文件夹)的层次结构,用户可以使用文件路径来访问文件和目录。

文件系统通常提供以下功能: - 文件和目录的创建、删除和重命名 - 文件和目录的读取和写入 - 文件和目录的权限管理 - 文件的共享和保护 - 文件的存储管理三、设计思路在设计文件系统时,需要考虑以下几个关键方面:1. 文件系统的组织结构文件系统可以采用不同的组织结构,常见的包括层次结构、网络结构和日志结构。

在设计文件系统时,需要根据具体需求选择合适的结构。

2. 文件和目录的管理文件系统需要提供对文件和目录的管理功能,包括创建、删除、重命名和移动等操作。

此外,还需要支持文件和目录的权限管理,确保只有授权用户可以进行相应操作。

3. 文件的存储管理文件系统需要负责将文件存储在磁盘或其他存储设备上,并提供高效的读写操作。

存储管理的关键是如何将文件划分为适当大小的块并将它们存储在存储设备上。

4. 文件的共享和保护文件系统需要支持文件的共享和保护。

共享可以使多个用户同时访问同一文件,保护则确保只有合法用户可以进行读写操作。

四、文件系统的关键组成部分一个典型的文件系统通常由以下几个关键组成部分构成:1. 文件控制块(FCB)文件控制块是文件系统中一个重要的数据结构,用于记录文件的相关信息,包括文件名、大小、权限和存储位置等。

操作系统文件管理系统 课程设计

操作系统文件管理系统 课程设计

操作系统文件管理系统课程设计
操作系统文件管理系统课程设计一般包括以下内容:
1. 基本概念和原理:介绍文件管理系统的基本概念和原理,包括文件、目录、文件系统、文件操作等。

2. 设计需求分析:明确设计需求,包括基本功能、用户需求、性能要求等。

3. 文件存储结构的设计:设计文件存储结构,包括文件分配方式、文件存储结构、文件目录结构、文件保护等。

4. 文件操作的实现:实现文件的创建、打开、读写、删除等基本操作,以及文件的复制、移动、重命名等高级操作。

5. 目录管理的实现:实现目录的创建、删除、重命名等操作,以及目录的遍历和搜索等功能。

6. 文件系统的实现:实现文件系统的格式化、挂载、卸载等操作,以及文件系统的安全性和可靠性保障。

7. 用户界面的设计:设计用户界面,包括命令行界面和图形界面,以方便用户进行文件管理操作。

8. 系统测试和调试:对系统进行测试和调试,包括单元测试、集成测试、性能测试等,以确保系统的稳定性和可靠性。

9. 报告撰写和展示:根据课程设计的要求,编写设计报告和展示文稿,介绍系统的设计思路、实现方法和成果。

以上是一个基本的操作系统文件管理系统课程设计的内容,具体可以根据教师的要求和课程的安排进行适当调整和扩展。

简单的文件系统课程设计

简单的文件系统课程设计

简单的文件系统课程设计一、课程目标知识目标:1. 学生能够理解文件系统的基本概念,掌握文件、文件夹的创建、删除、复制、移动等基本操作。

2. 学生能够了解简单文件系统的结构,掌握文件的存储、读取、写入等过程。

3. 学生能够掌握文件权限和文件属性的概念,了解如何保护文件安全。

技能目标:1. 学生能够熟练使用文件管理器,对文件和文件夹进行有效管理。

2. 学生能够编写简单的程序,实现对文件的基本操作,如读写、复制等。

3. 学生能够运用所学知识,解决实际生活中遇到的文件管理问题。

情感态度价值观目标:1. 培养学生良好的文件管理习惯,提高信息素养,增强信息处理能力。

2. 培养学生的团队协作意识,学会在合作中分享和交流文件资源。

3. 增强学生的网络安全意识,尊重知识产权,遵循法律法规。

本课程针对五年级学生设计,结合学生好奇心强、动手能力强、善于合作等特点,注重理论与实践相结合,让学生在实际操作中掌握文件系统知识。

课程目标具体、可衡量,便于教学设计和评估,有助于提高学生的信息素养和实际操作能力。

二、教学内容1. 文件系统基本概念:文件、文件夹、路径、文件类型等。

2. 文件管理基本操作:创建、删除、复制、移动、重命名文件和文件夹。

3. 文件系统结构:磁盘分区、目录结构、文件存储方式。

4. 文件读写过程:文件的打开、读取、写入、关闭。

5. 文件权限与属性:设置文件权限,了解文件属性的作用。

6. 文件管理器的使用:熟悉文件管理器的界面和功能,提高文件管理效率。

7. 简单文件操作编程:使用编程语言实现文件的创建、读写、删除等操作。

8. 文件共享与安全:文件共享的方法,文件加密、解密,保护文件安全。

教学内容根据以下教材章节组织:第一章:计算机系统概述第二节:文件系统基本概念第三节:文件管理基本操作第二章:文件系统第一节:文件系统结构第二节:文件读写过程第三节:文件权限与属性第三章:文件管理与应用第一节:文件管理器的使用第二节:简单文件操作编程第三节:文件共享与安全教学进度安排:共8课时,每课时40分钟。

课程设计文件系统使用

课程设计文件系统使用

课程设计文件系统使用一、教学目标本课程的目标是使学生掌握文件系统的基本概念、原理和实用技巧。

通过本课程的学习,学生应能够:1.知识目标:理解文件系统的基本概念,包括文件、目录、磁盘空间管理等;掌握文件系统的常用命令和操作,如文件创建、删除、复制、移动等。

2.技能目标:能够独立完成文件系统的日常管理和维护工作,如磁盘碎片整理、文件备份和恢复等;能够根据实际需要,定制个性化的文件管理系统。

3.情感态度价值观目标:培养学生对文件系统重要性的认识,使学生能够自觉地维护和合理地使用文件系统,提高工作效率和生活品质。

二、教学内容本课程的教学内容主要包括以下几个部分:1.文件系统概述:介绍文件系统的基本概念、原理和功能,使学生对文件系统有一个整体的认识。

2.文件系统的常用命令和操作:详细讲解文件系统的常用命令和操作,并通过实际操作使学生熟练掌握。

3.文件系统的管理和维护:介绍文件系统的管理和维护方法,如磁盘空间管理、文件备份和恢复等,使学生能够独立完成文件系统的日常管理和维护工作。

4.文件系统的定制:讲解如何根据实际需要,定制个性化的文件管理系统,提高工作效率。

三、教学方法本课程的教学方法主要包括讲授法、操作演示法、案例分析法和讨论法等。

1.讲授法:通过讲解文件系统的基本概念、原理和功能,使学生对文件系统有一个整体的认识。

2.操作演示法:通过实际操作演示,使学生熟练掌握文件系统的常用命令和操作。

3.案例分析法:通过分析实际案例,使学生了解文件系统的管理和维护方法,以及如何定制个性化的文件管理系统。

4.讨论法:通过分组讨论,激发学生的学习兴趣,培养学生的独立思考和解决问题的能力。

四、教学资源本课程的教学资源主要包括教材、多媒体资料和实验设备等。

1.教材:选用权威、实用的教材,为学生提供系统的文件系统知识。

2.多媒体资料:制作精美的多媒体课件,辅助讲解文件系统的概念和操作。

3.实验设备:提供足够的实验设备,使学生能够进行实际操作,巩固所学知识。

操作系统-文件系统课程设计报告(附源码)

操作系统-文件系统课程设计报告(附源码)

操作系统课程设计题目文件系统学院计算机学院专业计算机科学与技术年级班别 10级7 班学号 3110006154 学生姓名指导教师刘老师20年月日文件系统一、课程设计的内容:模拟文件系统实现的基本功能,了解文件系统的基本结构和管理方法,加深理解文件系统的内部功能及内部实现。

通过用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

二、可行性分析:可行性分析是通过对项目的主要内容和配套条件,并通过对各方面进行调查研究和分析比较,并对项目建成以后所带来的影响,从而提出该项目是否值得投资和如何进行建设的咨询意见,是一种综合性的系统分析方法。

可行性分析应具有预见性、公正性、可靠性、科学性的特点。

这里以三个方面来分析此次设计:经济可行性、技术可行性、法律可行性。

1、经济可行性:编写该文件系统,只需要用到PC机和VC++6.0编程软件,不需要花费金钱,所以,在经济方面,这个课程设计适合做。

2、技术可行性:在做这个课程设计,事先需要掌握的知识有C/C++语言,数据结构,操作系统,PC机的基本操作和VC++6.0软件的使用方法等。

目前,这些知识都已经学习并掌握了,所以在技术方面,这个课程设计也适合做。

3、法律可行性:做这个课程设计,只是为了掌握文件系统的基本内容,提升自己的编程能力,没有违反法律法规,所以,在法律方面,这个课程设计也适合做。

三、需求分析1.设计一个多用户多级目录文件管理系统。

2.要设计多个实用命令并设置文件保护措施。

3.设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入冗长的命令4. 功能简介:①多用户管理,多级目录形式。

②基本的文件操作功能,如新建文件、打开文件、写入文件、关闭文件、读取文件等。

③用户间文件的共享功能四、概要设计(逻辑图)1.系统结构图:2、界面简单说明该系统主要分为两个界面,用户操作界面及文件操作管理界面。

课程设计文件操作系统

课程设计文件操作系统

课程设计文件操作系统一、教学目标本课程的教学目标是使学生掌握操作系统的基本原理和常用操作系统的使用方法。

具体包括:1.了解操作系统的定义、功能和分类。

2.掌握操作系统的基本原理,如进程管理、内存管理、文件管理和设备管理。

3.熟悉常用操作系统的特点和使用方法,如Windows、Linux和macOS。

4.能够熟练使用操作系统进行日常计算机操作。

5.能够掌握操作系统的基本配置和优化方法。

6.能够运用操作系统的基本原理解决实际问题。

情感态度价值观目标:1.培养学生对操作系统的兴趣和好奇心,提高学生主动学习的积极性。

2.培养学生团队合作精神,学会与他人分享和交流操作系统的知识和经验。

3.培养学生对操作系统的安全意识,提高学生保护个人隐私和数据的能力。

二、教学内容本课程的教学内容主要包括操作系统的基本原理和常用操作系统的使用方法。

具体安排如下:1.操作系统概述:介绍操作系统的定义、功能和分类。

2.进程管理:讲解进程的概念、进程的状态、进程控制块、进程调度算法等。

3.内存管理:介绍内存的概念、内存分配与回收策略、虚拟内存等。

4.文件管理:讲解文件和目录的概念、文件系统的结构、文件访问控制等。

5.设备管理:介绍设备的概念、设备驱动程序、输入输出控制等。

6.Windows操作系统:讲解Windows操作系统的特点、界面布局、基本操作和高级功能。

7.Linux操作系统:介绍Linux操作系统的特点、界面布局、基本操作和高级功能。

8.macOS操作系统:讲解macOS操作系统的特点、界面布局、基本操作和高级功能。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。

1.讲授法:通过讲解操作系统的原理和概念,使学生掌握基本知识。

2.讨论法:学生分组讨论操作系统的实际应用场景和问题解决方案,培养学生的团队合作精神。

3.案例分析法:分析实际案例,使学生更好地理解操作系统的基本原理和常用操作系统的特点。

简单文件系统课程设计

简单文件系统课程设计

简单文件系统课程设计一、教学目标本课程旨在让学生了解和掌握简单文件系统的基本概念、原理和操作方法。

通过本课程的学习,学生应达到以下目标:1.知识目标:•理解文件系统的概念、作用和基本组成;•掌握文件的基本操作,如创建、删除、修改和复制;•了解文件系统的结构和存取控制;•掌握常用的文件系统及其优缺点。

2.技能目标:•能够使用命令行或图形界面操作文件系统;•能够使用基本的文件系统维护工具,如磁盘碎片整理工具、文件压缩工具等;•能够进行简单的文件系统优化和故障排除。

3.情感态度价值观目标:•培养学生对计算机系统的兴趣和好奇心,提高学生对计算机技术的认识;•培养学生良好的信息安全意识,了解保护文件和隐私的重要性;•培养学生团队协作和自主学习的能力,提高学生解决问题的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.文件系统概述:介绍文件系统的概念、作用和基本组成;2.文件的基本操作:讲解文件的创建、删除、修改和复制等基本操作;3.文件系统的结构:介绍文件系统的目录结构、文件存储方式和存取控制;4.常用的文件系统:讲解FAT32、NTFS等常用文件系统的原理和特点;5.文件系统维护:介绍文件系统的优化、故障排除和数据恢复等方法。

三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如:1.讲授法:讲解文件系统的基本概念、原理和操作方法;2.案例分析法:通过分析实际案例,让学生了解文件系统的应用和优缺点;3.实验法:引导学生动手操作,掌握文件系统的实际使用和维护方法;4.讨论法:学生进行小组讨论,培养学生的团队协作和问题解决能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择一本合适的教材,如《计算机操作系统》;2.参考书:提供相关的参考书籍,以便学生深入学习和拓展知识;3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更好地理解和掌握知识;4.实验设备:准备计算机、硬盘、U盘等实验设备,让学生进行实际操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统课程设计报告题目:文件系统专业:软件工程院系:信息管理学院年级:大三软件Q1141学号:*********名:**指导教师:***职称:副教授湖北经济学院教务处制目录操作系统课程设计报告一实验内容 (2)二设计的基本概念和原理 (2)三总体设计 (2)2-1 文件的组织结构 (2)2-2 磁盘空间的管理 (2)2-3 目录结构 (3)2-4文件操作 (4)四详细设计 (4)4-1 建立文件(create_file)流程图 (4)4-2 打开文件(open_file)流程图 (6)4-3读文件(read_file)流程图 (7)4-4 写文件(write_file)流程图 (8)4-5 关闭文件(close_file)流程图 (9)4-6 删除文件(delete_file)流程图 (10)4-7 显示文件内容(typefile)流程图 (11)4-8 建立目录(md)流程图 (12)4-9显示目录内容流程图 (13)五详细代码 (14)六运行结果截图 (40)七总结 (44)八参考文献 (45)一、实验内容要求设计一个简单的文件系统,用文件模拟磁盘,实现以下功能:(1)支持多级目录结构;(2)实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件、关闭文件、改变文件属性。

(3)编写主函数对所有操作进行测试二、设计的基本概念和原理为了正确地实现文件的存取,文件系统设计了一组与存取文件有关的功能模块,用户可以用“访问指令”调用这些功能模块,以实现文件的存取要求。

我们把文件系统设计的这一组功能模块称为“文件操作“,实验就是要模拟实现一些文件操作。

文件操作不是独立的,它和文件系统的其他部分密切相关,若要实现文件操作就离不开文件的目录结构、文件的组织结构和磁盘空间的管理。

因此,这个实习虽然是文件操作的模拟实现,但还是必须模拟一部分文件的组织结构、目录结构和磁盘空(2)磁盘空间的管理:首先要模拟一个磁盘,因为是实验,不用使用真正的磁盘,所以实验中用一个文件模拟一个小磁盘。

假设模拟磁盘有128个物理块,每个物理块大小为64个字节,盘块的块号从0编起,0,1,2,3……,127。

将文件分配表放在磁盘的开始处,因为盘块邮128块,所以文件分配表有128项,每项占用一个字节,这样文件分配表占用了磁盘的0块和1块,这两块不能作其他用处,若四、详细设计(1)建立文件:create_file(文件名,文件属性)五、详细代码int sopen(char *name) //在已打开的文件表中查找文件name{int i;i = 0;while(i<openfile.length && strcmp(openfile.file[i].name, name) !=0)//依次查找已打开文件表{i++;}if(i>=openfile.length){return -1;}return i;}void dopen(char *name) //在已打开文件表中删除文件name{int i;i = sopen(name);if(i==-1){printf("文件未打开\n");}else{copy(&openfile.file[i], &openfile.file[openfile.length - 1]);openfile.length--;}}int iopen(ofile *x)//向已打开文件列表中插入文件x->name{int i;i = sopen(x->name);if(i!=-1){printf("文件已经打开\n");return false;}else if(openfile.length == n){printf("已打开文件表已满");return false;}else{copy(&openfile.file[openfile.length], x);openfile.length ++;return true;}}int allocate()//分配一个磁盘块,返回块号{int i;fseek(fc, 0, SEEK_SET);//将模拟磁盘的文件指针移至模拟磁盘FAT表fread(buffer1,64L, 1, fc);for(i = 3; i < 63; i++){if(buffer1[i] == 0)//FAT中的第i项为0,分配第i块磁盘块,修改FAT 表,并且写回磁盘{buffer1[i] = 255;fseek(fc, 0, SEEK_SET);fwrite(buffer1, 64L, 1, fc);return i; //返回磁盘号}}fread(buffer1, 64L, 1, fc);//将FAT表中第二个磁盘块读入模拟缓冲buffer1for(i = 0; i < 63; i++)if(buffer1[i] == 0)//AT中的第i项为0,分配第i+64块磁盘块,修改FAT表,并且写回磁盘{buffer1[i] = 255;fseek(fc, -64L, SEEK_CUR);fwrite(buffer1, 64L, 1, fc);return i + 64; //返回磁盘号}}printf("已经没有磁盘空间\n");return false;}int read_file(char *name, int length)//读取文件,文件名为name, 读取长度为length{int i, t;char ch;if((i=sopen(name)) == -1){printf("文件未打开或不存在\n");return false;}if(openfile.file[i].flag == 1)printf("文件以写方式打开,不能读\n");return false;}t = 0;fseek(fc, openfile.file[i].read.dnum * 64L, SEEK_SET);fread(buffer1, 64, 1, fc);while(t < length && buffer1[openfile.file[i].read.bnum] != '#'){putchar(buffer1[openfile.file[i].read.bnum]); //读出一个字符显示在屏幕上if((t+1)%64 ==0){putchar('\n');}openfile.file[i].read.bnum ++;//修改读指针if(openfile.file[i].read.bnum >= 64) //一块读完,读取下一块{fseek(fc,openfile.file[i].read.dnum/64*64, SEEK_SET);fread(buffer1, 64, 1, fc);openfile.file[i].read.dnum=buffer1[openfile.file[i].read.dnum%64];openfile.file[i].read.bnum = 0; //修改读指针fseek(fc, openfile.file[i].read.dnum *64L, SEEK_SET);fread(buffer1, 64, 1, fc);}t++;}}int write_file(char *name, char *buff, int length)//name 文件路径名//buff 存放准备写入磁盘的内容//length 写入内容的长度{int i, t, dd;if((i=sopen(name))== -1){printf("文件未打开或不存在\n");return false;}if(openfile.file[i].flag == 0){printf("文件以只读方式打开,不能写\n");return false;}t = 0;fseek(fc,openfile.file[i].write.dnum*64L, SEEK_SET);fread(buffer1,64,1,fc);while(t<length){buffer1[openfile.file[i].write.bnum]=buff[t];openfile.file[i].write.bnum++;openfile.file[i].length++;if(openfile.file[i].write.bnum>=64){fseek(fc, openfile.file[i].write.dnum*64L, SEEK_SET);fwrite(buffer1,64,1,fc);/*一块写完,写回磁盘*/if((dd=allocate())==false){openfile.file[i].write.bnum--;openfile.file[i].length--;printf("无磁盘空间,部分信息丢失,写失败\n");return (false);}fseek(fc,openfile.file[i].write.dnum/64*64L, SEEK_SET);fread(buffer1,64,1,fc);buffer1[openfile.file[i].write.dnum%64]=dd;fseek(fc,openfile.file[i].write.dnum/64*64L, SEEK_SET); fwrite(buffer1,64,1,fc);openfile.file[i].write.dnum=dd;openfile.file[i].write.bnum=0;}t++;}fseek(fc, openfile.file[i].write.dnum*64L, SEEK_SET);fwrite(buffer1,64,1,fc);//一块写完,写回磁盘//}/*写函数结束*/int search(char *name, int flag, int *dnum, int *bnum)//查找路径名为name的文件或目录,返回该目录的起始盘块号//flag=8 表示查找目录,否则为文件//dnum, bnum 返回文件或目录的目录项登记位置,盘块dnum中第bnum项{int k, i, s, t, j, last = 0;char pna[3], type[2];if(strcmp(name, "") == 0 || strcmp(name, "/") == 0)//根目录return 2;k = 0;if(name[0] == '/') k =1;i = 2; // i为根目录的起始盘号while(last != 1) //pna为从name中分离出"/"后一个目录名或文件名{for(s = 0; name[k]!='.' && name[k] != '/' && s < 3 && name[k]!= '\0'; s++, k++)pna[s] = name[k];for( ; s < 3; s++)//用空格补齐全名字长度pna[s] = ' ';while(name[k]!='.' && name[k]!='\0' && name[k] != '/')//除去多余字符k++;type[0]= type[1] = ' ';if(name[k] == '.')// 取文件类型名if(flag == 8){printf("目录不应该有类型名,查找失败\n");return false;}else{//文件遇到类型名认为结束,后面的字符作废k++;if(name[k] != '\0') type[0] = name[k];k++;if(name[k] != '\0') type[1] = name[k];if(name[k] != '\0' && name[k+1] != '\0'){printf("文件名错误\n");return false;}last = 1;}elseif(name[k] != '\0') k ++;if(name[k] == '\0')last = 1;//查找名字等于pna的目录项fseek(fc, i*64L, SEEK_SET);fread(buffer2, 64L, 1, fc);j = 0;if(last ==1 && flag != 8) //查找名字pna,类型名type的文件目录项while(j < 8 && !buffer2[j].attribute != 8 && buffer2[j].name[0] == pna[0] && buffer2[j].name[1]== pna[1] && buffer2[j].name[2] == pna[2])j ++;elsewhile(j < 8 && !buffer2[j].attribute == 8 &&buffer2[j].name[0] == pna[0] && buffer2[j].name[1]== pna[1] &&buffer2[j].name[2] == pna[2])j ++;if(j < 8) //找到该目录或文件if(last == 1) //查找结束{*dnum = i;*bnum = j;return buffer2[j].address;}else{i = buffer2[j].address;}else{printf("路径错误\n");return false;}}//while 查找结束}//search查找结束int create_file(char *name, int attribute)//建立文件,路径为name,文件属性attribute{int dnum, bnum, i, j, last, k, s, d, t, tt, b, dd, flag, dn, bn;char dname[3], tname[2], pathname[20];ofile x;if(attribute % 2 == 1){printf("只读文件,无法写,不能建立\n");return false;}if(openfile.length == n){printf("已打开表已满,不能建立\n");return false;}//将name分为两部分,目录路径pathname和目录名dnamefor(j = 0; name[j] != '\0'; j++)//查找最后一个'/'{if(name[j] == '/') s = j;}for(j = 0; j < s; j++)//分离目录路径{pathname[j] = name[j];}pathname[j] = '\0'; //字符数组最后一个置\0for(k = 0, j = s+1; name[j]!='\0' && k < 3 && name[j]!='.'; j++,k++)//分离文件名{dname[k] = name[j];}if(k == 0){printf("文件名错误或目录名错误\n");return false;}for(; k < 3; k++){dname[k] = ' ';}k = 0;if(name[j ++] == '.')//分离类型名{for( ; name[j] != '\0' && k < 2 && name[j] != '.'; j++, k++)tname[k] = name[j];}for( ; k < 2; k ++)tname[k] = ' ';if((d = search(pathname, 8, &dn, &bn)) == false)//找目录路径{printf("目录不存在,不能建立\n");return false;}//确认该目录不存在的同时查找空目录项b = -1;fseek(fc, d*64L, SEEK_SET);fread(buffer2, 64L, 1, fc); //读出D盘块的内容for(t = 0; t < 8; t ++){if(buffer2[t].name[0] == dname[0] && buffer2[t].name[1] == dname[1] && buffer2[t].name[2] == dname[2] && buffer2[t].type[1] == tname[1]){//找到名字dname的文件,建立失败printf("文件已经存在,不能建立\n");return false;}if(buffer2[t].name[0] == '$' && b == -1)b = t;}if(b == -1)//没有空目录,建立失败{printf("目录无空间\n");return false;}if((dd = allocate()) == false) //分配给建立目录的磁盘盘块dd {printf("建立文件失败\n");return false;}//填写项目for(i = 0; i < 3; i++){buffer2[b].name[i] = dname[i];}for(i = 0; i < 2; i ++){buffer2[b].type[i] = tname[i];}buffer2[b].attribute = attribute;buffer2[b].address = dd;buffer2[b].length = 0;fseek(fc, d * 64L, SEEK_SET);fwrite(buffer2, 64L, 1, fc);// 填写已打开文件表strcpy(, name);x.attribute = attribute;x.number = dd;x.length = 0;x.flag = 1;x.read.dnum = x.write.dnum = dd;x.read.bnum = x.write.bnum = 0;iopen(&x);}//文件建立结束int open_file(char *name, int attribute)//打开文件{ofile x;int dnum, bnum, last, i, d;if( (d=search(name, 4, &dnum, &bnum)) == false) {printf("文件不存在,打开文件失败\n");return false;}fseek(fc, dnum * 64L, SEEK_SET);fread(buffer2, 64, 1, fc);if((buffer2[bnum].attribute%2 == 1) && attribute == 1) //对只读文件要求写{printf("文件不能写, 打开失败");return false;}strcpy(, name);x.attribute = buffer2[bnum].attribute;x.number = buffer2[bnum].address;x.read.dnum = x.write.dnum = buffer2[bnum].address;x.read.bnum = x.write.bnum = 0;x.flag = attribute;if(attribute == 1){while(d != '\xff') //寻找文件末尾{fseek(fc, d/64*64L, SEEK_SET);fread(buffer1, 64L, 1, fc); //读出dnum项所在FATlast = d;d = buffer1[d % 64];}x.write.dnum = last;fseek(fc, last*64L, SEEK_SET);for(i = 0; i < 64 && buffer1[i] != '#'; i++);x.write.bnum = i;x.length = (buffer2[bnum].length - 1) * 64 + i;}iopen(&x);}int close_file(char *name)//关闭文件{int i, dnum, bnum;if((i = sopen(name)) == -1){printf("打开的文件中没有改文件,关闭失败\n");return false;}if(openfile.file[i].flag == 1) //写文件的追加文件的结束符{fseek(fc, openfile.file[i].write.dnum * 64L, SEEK_SET);fread(buffer1, 64, 1, fc);buffer1[openfile.file[i].write.bnum] = '#';fseek(fc, openfile.file[i].write.dnum * 64L, SEEK_SET);fwrite(buffer1, 64, 1, fc);fputc('#', fc);search(name, 4, &dnum, &bnum);//查找文件目录位置//修改目录中文件长度fseek(fc, dnum*64L, SEEK_SET);fread(buffer2, 64, 1, fc);buffer2[bnum].length = openfile.file[i].length/64+1;fseek(fc, dnum*64L, SEEK_SET);fwrite(buffer2, 64, 1, fc);}//在已打开的文件表中删除该文件的登记项if(openfile.length > 1){copy(&openfile.file[i], &openfile.file[openfile.length - 1]);openfile.length --;}}int delete_doc(char *name)//删除文件{int dnum, bnum, t;if((t = search(name, 4, &dnum, &bnum)) == false) //查找文件{printf("文件不存在\n");return false;}if(sopen(name) != -1) //文件已打开,不能删除{printf("文件已打开,不能删除\n");return false;}fseek(fc, dnum * 64L, SEEK_SET);fread(buffer2, 64, 1, fc);buffer2[bnum].name[0] = '$'; //将该文件的目录置成空目录fseek(fc, dnum * 64L, SEEK_SET);fwrite(buffer2, 64, 1, fc);while(t != '\xff'){dnum = t;fseek(fc, dnum/64*64, SEEK_SET);fread(buffer1, 64, 1, fc);t = buffer1[dnum % 64];buffer1[dnum % 64] = 0;fseek(fc, dnum/64*64L, SEEK_SET);fwrite(buffer1, 64, 1, fc);}}//文件删除结束int md(char *name)//建立目录,目录路径为name{int dnum, bnum, i, j, last, k, s, d, t, tt, b, dd, flag, dn, bn;char dname[3], pathname[20];i = 2; //i等于根目录的起始盘块号//将name分成两部分,目录路径path和目录名dnamefor(j = 0; name[j] != '\0'; j++) //查找最后一个'/'{if(name[j] == '/') s = j;}//分离目录路径for(j = 0; j < s; j++){pathname[j] = name[j];}pathname[j] = '\0';//分离目录名for(k = 0, j = s+1; name[j] != '\0' && k < 3 && name[j] !='.'; j++, k++) dname[k] = name[j];if(k == 0 ){printf("错误文件名或目录名\n");return false;}for(; k < 3; k++){dname[k] = ' ';}if((d = search(pathname, 8, &dn, &bn)) == false)//找不到目录路径{printf("目录不存在,不能建立\n");return false;}b = -1;//确认该目录存在的同时查找空目录项fseek(fc, d*64L, SEEK_SET);fread(buffer2, 64L, 1, fc); //读出D盘块内容for(t =0; t < 8; t ++){if(buffer2[t].name[0] == dname[0] && buffer2[t].name[1] == dname[1] && buffer2[t].name[2] == dname[2] && buffer2[t].attribute == 8){//找到名字dname的目录,建立失败printf("目录已经存在,不能建立\n");return false;}if(buffer2[t].name[0] == '$' && b== -1)b = t;}if(b == -1) //没有空目录项,不能建立{printf("目录无空间\n");return false;}if((dd = allocate()) == false){printf("没有磁盘空间\n");//分配给建立目录的磁盘盘块dd return false;}//填写目录项for(i = 0; i < 3; i++){buffer2[b].name[i] = dname[i];}buffer2[b].type[0] = buffer2[b].type[1] = ' ';buffer2[b].attribute = 8;buffer2[b].address = dd;buffer2[b].length = 0;fseek(fc, d * 64L, SEEK_SET);fwrite(buffer2, 64L, 1, fc);//分给新建目录的盘块初始化for(t = 0; t < 0; t ++)buffer2[t].name[0] = '$';fseek(fc, dd*64L, SEEK_SET);fwrite(buffer2, 64L, 1, fc);}//建立目录结束int dis_dir(char *name)//显示目录内容{int i, bnum, t, tt, dnum, dn, bn;if((dnum = search(name, 8, &dn, &bn)) == false)//找不到目录路径{printf("目录不存在\n");return false;}printf("名称\t 扩展名\t 起始盘块\t 长度\n");//显示目录类容fseek(fc, dnum*64L, SEEK_SET);fread(buffer2, 64L, 1, fc);for(t = 0; t < 8; t ++){if(buffer2[t].name[0] != '$')printf("%c%c%c\t%c%c\t%4d%7d\n",buffer2[t].name[0], buffer2[t].name[1], buffer2[t].name[2], buffer2[t].type[0],buffer2[t].type[1], buffer2[t].address, buffer2[t].length);}}//显示目录函数结束int rd(char *name)//删除空目录{int dnum, bnum, t, i, flag;if((t = search(name, 8, &dnum, &bnum)) == false)//查找文件{printf("目录不存在\n");return false;}if(strcmp(name,"/") == 0)//根目录不能删除{printf("该目录为根目录,不能删除\n");return false;}fseek(fc, t * 64L, SEEK_SET);fread(buffer2, 64, 1, fc);flag = 1;for(i = 0; i < 8; i ++){if(buffer2[bnum].name[0] != '$')flag = 0;}if(flag == 0){printf("该目录为非空目录,不能删除\n");return false;}fseek(fc, dnum * 64L, SEEK_SET);fread(buffer2, 64, 1, fc);buffer2[bnum].name[0] = '$';fseek(fc, dnum * 64L, SEEK_SET);fwrite(buffer2, 64, 1, fc);fseek(fc, t/64*64, SEEK_SET);fread(buffer1, 64, 1, fc);t = buffer1[t%64];buffer1[t%64] = 0;fseek(fc, t/64*64, SEEK_SET);fwrite(buffer1, 64, 1, fc);}int typefile(char *name)//显示文件内容{int i, dnum, dn, bn, t;if((dnum = search(name, 1, &dn, &bn)) == false) {printf("文件不存在\n");return false;}if(sopen(name) != -1){printf("该文件打开,不能显示\n");return false;}while(dnum != '\xff'){fseek(fc, dnum * 64L, SEEK_SET);fread(buffer1, 64, 1, fc); //读一个盘块到缓冲区for(t = 0; t < 64 && buffer1[t] != '#'; t++) //显示缓冲内容putchar(buffer1[t]);printf("\n");}//获得下一个盘块fseek(fc, dnum/64*64L, SEEK_SET);fread(buffer1, 64, 1, fc);dnum = buffer1[dnum % 64];}//显示文件函数结束int change(char *name, int attribute)//改变文件的属性为attribute {int dnum, bnum;if(search(name, 1, &dnum, &bnum) == false){printf("文件不存在\n");return false;}if(sopen(name) != -1){printf("该文件打开,不能改变文件属性\n");return false;}fseek(fc, dnum*64L, SEEK_SET);fread(buffer2, 64, 1, fc); //读出该目录所在盘块 buffer2[bnum].attribute = attribute;//修改属性 fseek(fc, dnum * 64L, SEEK_SET);fwrite(buffer2, 64, 1, fc); //写回磁盘}//改变文件属性结束六、实验主界面及运行截图1.建立目录2.显示目录内容3.建立文件4.打开文件5.写文件6显示目录内容7.关闭文件七、总结文件这一块内容从大一开始c语言这一块就开始学了,但基础一直没打好,借着这次课程设计的机会,我打算复习文件操作。

相关文档
最新文档