天津科技大学操作系统专业课程设计样本(共29页)_第1页
天津科技大学操作系统专业课程设计样本(共29页)_第2页
天津科技大学操作系统专业课程设计样本(共29页)_第3页
天津科技大学操作系统专业课程设计样本(共29页)_第4页
天津科技大学操作系统专业课程设计样本(共29页)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

4、e largest child每个用户下可以最多有50个文件*/#define MAX(MAXCHILD*MAXCHILD)/*the size of fpaddrno 定义一个常量2500个扇区*/typedef struct /*the structure of OSFILE*/int fpaddr; /*file physical address物理地址*/ int flength; /*file length文件长度*/ int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write; 3-Protect;*/ char

5、 fnameMAXNAME; /*file name文件名*/ OSFILE; typedef struct /*the structure of OSUFD*/ char ufdnameMAXNAME; /*ufd name*/ OSFILE ufdfileMAXCHILD; /*ufd own file*/ OSUFD;/*osf文件的数据结构*/ typedef struct /*the structure of OSUFD'LOGIN*/ char ufdnameMAXNAME; /*ufd name*/ char ufdpword8; /*ufd password*/ OSU

6、FD_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; void LoginF(); /*LOGIN FileSystem*/ void DirF(); /*Dir FileSystem*/ void CdF(); /*Change Dir*/ void CreateF(); /*Create File*/ void

7、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 help();3总体功能程序结构图(1)open():进入open()当前用户名和当前目录相同?NY请转到当前用户名目录下当前文件存在?(文件号>

8、0)输入要打开的文件名,并查找对应的文件号Y该文件不存在N确定当前用户的用户号该文件已经打开?N该文件已经打开,不用再打开Y该文件可以被打开?(不是protect型的)Y该文件是protect的,不能打开打开文件N返回主函数(2)close():进入close()当前用户名和当前目录相同?NY请转到当前用户名目录下当前文件存在?(文件号>0)输入要关闭的文件名,并查找对应的文件号Y该文件不存在N确定当前用户的用户号该文件是关闭的?N该文件未打开,不用关闭YY关闭文件返回主函数(3)write():进入write()当前用户名和当前目录相同?NY请转到当前用户名目录下有打开的文件?输入要写

9、入的文件名,并查找对应的文件号无已经打开的文件提示必须先打开,并显示出已经打开的文件列表NY当前文件存在?(文件号>0)该文件不存在NY该文件已经打开?该文件未打开,不能写NY该文件可以被写入?(是可写或读写模式)该文件是制度模式或保护模式N确定文件路径写入内容到文件中记录文件长度返回主函数(4)delete进入delete()当前用户名和当前目录相同?NY请转到当前用户名目录下当前文件存在?(文件号>0)输入要删除的文件名,并查找对应的文件号Y该文件不存在N确定当前用户的用户号该文件可以被删除?(不是protect型的)该文件是protect的,不能打开NY该文件已经打开?该文件

10、已经打开,不能删除YN删除文件确定文件路径删除的后面的文件向前移该用户的文件总数-1返回主函数把删除后的地址号置为未用【源程序清单】void OpenF() char fnameMAXNAME;int i,k;if (strcmp(strupr(dirname),strupr(username)!=0) printf("nError! You can only open file in yourself dir.n");else printf("nPlease input FileName:");gets(fname);ltrim(rtrim(fname

11、); 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",fname);else if(ufdk->ufdfilei.fmode=0)|(ufdk->ufdfilei.fmode=1)|(ufdk->ufdfilei.fmode=2)ifopenki.ifopen=1; ifopenki.openmode=

12、(ufdk->ufdfilei.fmode); printf("'%s' has been opened successfully!",fname);else printf("n'%s' is a protected file, it can not be opened.",fname); elseprintf("nError.'%s' dose not exist.n",fname);void CloseF() char fnameMAXNAME;int i,k;if (strc

13、mp(strupr(dirname),strupr(username)!=0) printf(" can only modify filemode in yourself dir.n");else printf("nPlease input FileName:");gets(fname);ltrim(rtrim(fname); i=ExistF(fname); if (i>=0) k=ExistD(username); if(ifopenki.ifopen=0) printf("nError. '%s' has been

14、closed. you can not close it again.n",fname);else ifopenki.ifopen=0; ifopenki.openmode=4;printf("'%s' has been closed successfully!",fname);else printf("nError. '%s' dose not exist.n",fname);void DeleteF() char fnameMAXNAME;int i,k,x;char str255,str1255;if (s

15、trcmp(strupr(dirname),strupr(username)!=0) printf("nError. You can only delete file in yourself dir.n");else printf("nPlease input FileName:");gets(fname);ltrim(rtrim(fname);i=ExistF(fname); if (i>=0) k=ExistD(username); if(ufdk->ufdfilei.fmode=3)printf("n'%s'

16、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); strcpy(str1,"file"); strcat(str1,str); strcpy(str,"c:osfilefile"); strcat(

17、str,str1); x =_unlink(str); fpaddrnoufdk->ufdfilei.fpaddr=0; for(i;i<(fcountk-1);i+)ufdk->ufdfilei=ufdk->ufdfilei+1; fcountk-; printf("'%s' has been deleted successfully!",fname); else printf("nError. '%s' dose not exist.n",fname); void WriteF() char s

18、tr50,str150;int i,k,n=0;int length=0; char c;char fnameMAXNAME;char *rtrim(char *str); char *ltrim(char *str); int ExistF(char *filename); int ExistD(char *dirname);if (strcmp(strupr(ltrim(rtrim(dirname),"")=0) printf(" convert to ufd dir before write.n");return;elseprintf("

19、nCaution:Open file firstn"); 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+;if(n%4=0)&&(n!=0) printf("n"); printf(

20、"n%d files openned.n",n);if (n=0) return;if(n!=0) printf("nPlease input FileName:");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.fpaddr,str,10); strcpy(str1,"file"

21、);strcat(str1,str);strcpy(str,"c:osfilefile"); strcat(str,str1); /*str形成路径c:osfilefilefilex*/fp_file=fopen(str,"wb+"); printf("Please input text('#' stands for end):n");while(c=getchar()!='#')fprintf(fp_file,"%c",c); if (c!='n') length+; getchar();fprintf(fp_file,"n"); fclose(fp_file); printf("write succ

温馨提示

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

评论

0/150

提交评论