天津科技大学操作系统课程设计_第1页
天津科技大学操作系统课程设计_第2页
天津科技大学操作系统课程设计_第3页
天津科技大学操作系统课程设计_第4页
天津科技大学操作系统课程设计_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2014-2015学年第一学期操作系统课程设计实验指导书业:软件工程级:121031号:121031名:提交日期:2015.1.7操作系统课程设计【 设计题目】Linux 二级文件系统设计【 设计目的】( 1 )本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。( 2 )结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。( 3 )通过分对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力【 设计内容】为Linux系统设计一个简单的二级文件系统。要求做到以下几点:可以实现下列几条命令:login用户登录dir列

2、目录Attrib修改文件属性create创建文件delete删除文件open打开文件close关闭文件read读文件write写文件cd进出目录列目录时要列出文件名,物理地址,保护码和文件长度源文件可以进行读写保护【 开发语言及实现平台或实验环境】C+/VC+【 相关知识综述】理解二级目录的文件系统的组织; 掌握常用的数据结构; 系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件; 使用文件来模拟外存, 进行数据结构设计和操作算法的设计, 实现一个文件系统并实现基本的文件操作 (为了简便文件系统, 不考虑文件共享, 文件系统安全以及管道文件与设备文件等特殊内容)。【 设计

3、思路】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。 另外, 为了简便文件系统未考虑文件共享, 文件系统安全以及管道文件与设备文件等特殊内容。 首先应确定文件系统的数据结构: 主目录、 子目录及活动文件等。 主目录和子目录都以文件的形式存放于磁盘, 这样便于查找和修改。 用户创建的文件,可以编号存储于磁盘上。如:并以编号作为物理地址,在目录中进行登记1. 主要的数据结构#define MAXNAME 25/* mfdname,ufdname, 表示三种文件的长度 25*/#define MAXCHILD 50 /*the largest child 每个用户下

4、可以最多有50个文件*/#define MAX(MAXCHILD*MAXCHILD)/*the size of fpaddrno 定义一个常量2500个扇区*/typedef struct /*the structure of OSFILE*/int fpaddr;/* address 物理地址*/int flength;/* 文件长度 */int fmode; /* Only;1-Write Only;2-Read and Write; 3-Protect;*/ char fnameMAXNAME;/*文件名 */ OSFILE;typedef struct /*the structure

5、of OSUFD*/char ufdnameMAXNAME; /*ufd name*/OSMAXCHILD; /*ufd own file*/OSUFD; /*osf 文件的数据结构*/typedef struct /*the structure of OSUFD'LOGIN*/char ufdnameMAXNAME;/*ufd name*/char ufdpword8;/*ufd password*/ OSUFD_LOGIN;typedef struct /* mode*/int ifopen; /*ifopen:0-close,1-open*/int openmode; /*0-r

6、ead only,1-write only,2-read and write,3-initial*/ OSUFD_OPENMODE;2.主要函数void LoginF(); /*LOGIN */void DirF();/*Dir */void CdF();/*Change Dir*/void CreateF(); /*Create File*/void DeleteF(); /*Delete File*/void ModifyFM(); /*Modify */void OpenF();/*Open File*/void CloseF();/*Close File*/void ReadF();

7、/*Read File*/void WriteF(); /*Write File*/void QuitF(); /*Quit 退出文件系统*/void help();3总体功能程序结构图( 1 ) open():返回主函数(2) close():返回主函数Y(3) write():确定文件路径写入内容到文件中记录文件长度返回主函数(4) deletedelete()把删除后的地址号置为未用删除的后面的文件向前移返回主函数该用户的文件总数-1【源程序清单】void OpenF()char fnameMAXNAME;int i,k;if (strcmp(strupr(dirname),strupr

8、(username)!=0)printf("nError! You can only open yourself dir.n");elseprintf("nPlease input :");gets(fname);ltrim(rtrim(fname);i=ExistF(fname);if (i>=0)k=ExistD(username);if(ifopenki.ifopen=1)printf("nError. file '%s' had been opened, it can not be opened again.n&q

9、uot;,fname);elseif(ufdk->ufdfilei.fmode=0)|(ufdk->ufdfilei.fmode=1)|(ufdk->ufdfilei.fmode=2)ifopenki.ifopen=1;ifopenki.openmode=(ufdk->ufdfilei.fmode);printf("'%s' has been opened successfully!",fname);elseprintf("n'%s' is a protected file, it can not be op

10、ened.",fname);elseprintf("nError.'%s' dose not exist.n",fname);void CloseF()char fnameMAXNAME;int i,k;if (strcmp(strupr(dirname),strupr(username)!=0)printf("nError.You can only modify in yourself dir.n");elseprintf("nPlease input :");gets(fname);ltrim(rtrim

11、(fname);i=ExistF(fname);if (i>=0)k=ExistD(username);if(ifopenki.ifopen=0)printf("nError. '%s' has been closed. you can not close it again.n",fname);elseifopenki.ifopen=0;ifopenki.openmode=4;printf("'%s' has been closed successfully!",fname);elseprintf("nEr

12、ror. '%s' dose not exist.n",fname);void DeleteF()char fnameMAXNAME;int i,k,x;char str255,str1255;if (strcmp(strupr(dirname),strupr(username)!=0)printf("nError. You can only delete yourself dir.n");elseprintf("nPlease input :");gets(fname);ltrim(rtrim(fname);i=ExistF(

13、fname);if (i>=0)k=ExistD(username);if(ufdk->ufdfilei.fmode=3)printf("n'%s' is a protected file, it can not be deleted.",fname);elseif(ifopenki.ifopen=1)printf("n'%s' has been opened, it can not be deleted.",fname); elseitoa(ufdk->ufdfilei.fpaddr,str,10);s

14、trcpy(str1,"file");strcat(str1,str);strcpy(str,"c:osfilefile");strcat(str,str1);x =_unlink(str);fpaddrnoufdk->ufdfilei.fpaddr=0;for(i;i<(fcountk-1);i+)ufdk->ufdfilei=ufdk->ufd;fcountk-;printf("'%s' has been deleted successfully!",fname);elseprintf(&q

15、uot;nError. '%s' dose not exist.n",fname);void WriteF()char str50,str150;int i,k,n=0;int length=0;char c;char fnameMAXNAME;char *rtrim(char *str);char *ltrim(char *str);int ExistF(char *);int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname),"")=0)printf("nErro

16、r.Please convert to ufd dir before write.n");return;elseprintf("nCaution:Open n");printf("Opened File(s) List:n");k=ExistD(dirname);for(i=0;i<fcountk;i+)if (ifopenki.ifopen=1)if (ifopenki.openmode=0) |(ifopenki.openmode=2)printf("%15s",ufdk->ufdfilei.fname);n

17、+;if(n%4=0)&&(n!=0)printf("n");printf("n%d files openned.n",n);if (n=0)return;if(n!=0)printf("nPlease input :");gets(fname);ltrim(rtrim(fname);i=ExistF(fname);if(i>=0)if(ifopenki.ifopen=1)if(ifopenki.openmode=1) |(ifopenki.openmode=2) itoa(ufdk->ufdfilei.f

18、paddr,str,10);strcpy(str1,"file");strcat(str1,str);strcpy(str,"c:osfilefile");strcat(str,str1); /*str 形成路径 c:osfilefilefilex*/fp_(str,"wb+");printf("Please input text('#' stands for end):n");while(c=getchar()!='#')fprintf(fp_file,"%c"

19、,c);if (c!='n')length+;getchar();fprintf(fp_file,"n");fclose(fp_file);printf("write successfully!n");ufdk->ufdfilei.flength=length; else printf("nError.'%s' has been opened with read ONL Y mode. Itisn't write.n",fname);elseprintf("nError.'%s'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论