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

上传人:jian****018 文档编号:8789747 上传时间:2020-03-31 格式:DOC 页数:15 大小:84KB
返回 下载 相关 举报
操作系统课程设计Linux二级文件系统设计.doc_第1页
第1页 / 共15页
操作系统课程设计Linux二级文件系统设计.doc_第2页
第2页 / 共15页
操作系统课程设计Linux二级文件系统设计.doc_第3页
第3页 / 共15页
点击查看更多>>
资源描述
操作系统课程设计报告专 业:软件工程学 号:姓 名:马提交日期:2017/1/10【设计目的】1、 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现2、 结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统3、通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力 【设计内容】为Linux系统设计一个简单的二级文件系统。要求做到以下几点:1.可以实现下列几条命令:login 用户登录dir 列目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录2列目录时要列出文件名,物理地址,保护码和文件长度3源文件可以进行读写保护【实验环境】C+DevCpp【设计思路】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2并以编号作为物理地址,在目录中进行登记。结构体: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 fnameMAXNAME; /*file name*/ OSFILE; /存放重要信息 typedef struct /*the structure of OSUFD*/ char ufdnameMAXNAME; /*ufd name*/ OSFILE ufdfileMAXCHILD; /*ufd own file*/OSUFD; /用户下面的文件 typedef struct /*the structure of OSUFDLOGIN*/ char ufdnameMAXNAME; /*ufd name*/ char ufdpword8; /*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;主要的函数说明:void LoginF(); /*LOGIN FileSystem用户登录*/void DirF(); /*Dir FileSystem列目录*/void CdF(); /*Change Dir改变目录*/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 help();其他重要函数:void clrscr() /清屏int ExistD(char *dirname) /*Whether DirName Exist,Exist-i,Not Exist-0*/ int ExistF(char *filename) /*Whether FileName Exist,Exist-i,Not Exist-0*/int FindPANo() /*find out physical address num*/void SetPANo(int RorW) /*Set physical address num,0-read,1-write*/void InputPW(char *password) /*input password,use * replace*/ char *ltrim(char *str) /*remove the heading blanks.去除左空白*/char *rtrim(char *str) /*remove the trailing blanks.去除右空白*/int WriteF1() /*write file相当于置换文件*/程序流程说明:整体流程:开始Login(Name/Pw/Cpw)创建文件打开文件删除文件写文件更改目录修改文件属性读文件关闭文件退出系统清屏添加覆盖结束各部分功能流程:Open: N N YDelete:开始Delete主目录是否为空?Y确认删除文件在用户目录下!N用户是否在用户目录下? N只能修改用户目录下的文件!Y接收删除文件名获取文件文件被打开或被保护?Y打开或被保护状态不可删除N获取物理块号文件向前移动删除文件,文件数减一删除文件成功!结束Write:开始Write用户是否在目录下?N文件不存在! Y获取文件 确认该文件被打开文件权限为只写或读写 N文件为只读和保护,不允许写! Y获取路径0追加,1覆盖?1覆盖0追加文件写入成功!结束Close:开始CloseN用户是否在目录下?请确认要关闭的文件是在用户目录下! Y罗列已经打开的文件获取文件名获取物理地址文件是否处于关闭状态?Y该文件已被关闭 N关闭文件文件成功关闭结束【源程序清单】Open:void OpenF() /*Open File*/ printf(nnC:%s,strupr(dirname); /显示当前路径 int fcoun, i; /定义两个整形变量 char fnameMAXNAME, fmode25; /定义两个字符串变量 int fmod; /文件模式 printf(nPlease input FileName:); gets(fname); /接收打开文件的文件名 ltrim(rtrim(fname); /去除左右空白 if(ExistF(fname)0) /判断文件是否存在 /不存在 printf(nError.文件名 %s不存在n, fname); wgetchar=1; else /存在 i=ExistD(username); /获取用户物理信息 for(int a=0; a ufdfilea.fname)=0) /找到文件 fcoun=a; break; ifopenifcoun.ifopen=1; /将文件状态置为打开状态 printf(Please input OpenMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):); /打开文件模式 gets(fmode); /获取模式 fmod=atoi(fmode); /将字符串转换为整型 ifopenifcoun.openmode=fmod; /将文件的模式置为OpenMode printf(nOpen Successed); wgetchar=1; Delete:void DeleteF() /*Delete File*/ printf(nnC:%s,strupr(dirname); /显示路径 char fnameMAXNAME, str50, str150; /定义三个字符串变量 int i, k, j; int fpaddrno1; /记录文件物理地址块号 if(strcmp(strupr(ltrim(rtrim(dirname), )=0) /判断主目录是否为空 printf(nError.请确认您要删除的是否在用户目录下!n); wgetchar=1; if(strcmp(strupr(dirname), strupr(username)!=0) /判断用户是否在用户目录下 printf(nError.您只能删除修改自己用户目录下的文件哦!n); wgetchar=1; else printf(nPlease input FileName:); gets(fname); /接收删除的文件名 ltrim(rtrim(fname); /去除文件名的左右空白 i=ExistF(fname); /用户文件位置 if(i=0) k=ExistD(username); /获取用户所在存储位置 if(ifopenki.ifopen=1) /文件状态处于打开状态,不许删除 printf(n Error.%s 处于打开状态!请先关闭哟!n, fname); wgetchar=1; else if(ufdk-ufdfilei.fmode=3) /保护文件,不可删除 printf(nError.%s处于被保护状态!请先关闭哟!n, fname); wgetchar=1; else fpaddrno1=ufdk-ufdfilei.fpaddr; /获取文件的物理地址块号 fpaddrnofpaddrno1=0; /回收物理地址块号 for(j=i; jufdfilej=ufdk-ufdfilej+1; /将j+1位置为j strcpy(str , c:osfilefile); itoa(fpaddrno1, str1, 10); /将整数转化为字符串 strcat(str, str1); strcat(str, .txt);/连接 remove(str); /删除物理文件 fcountk-; /文件个数减一 printf(n%sis deleted successfully.n, fname); wgetchar=1; else printf(nError.%s文件不存在!n, fname); /文件不存在 wgetchar=1; Write:void WriteF() /*Write File*/ printf(nnC:%s,strupr(dirname); /显示用户路径 int i, k, m=0; /定义整形变量 int length; /定义长度整形变量 char fnameMAXNAME; /定义文件名字符串 char str255, str1255; /定义两个字符串变量 if(strcmp(strupr(dirname), strupr(username)!=0) /判断用户是否在用户目录下 printf(nError!请确认您要写的在用户目录下!n); wgetchar=1; return; printf(n请先打开文件!n); printf(Opened File(s) List:n); k=ExistD(dirname); /获取用户文件信息 for(i=0; iufdfilei.fname); m+; if(m%4 = 0 & m!=0) /每创建4个文件换一行 printf(n); printf(n%d 文件已经打开啦!n, m); if(m = 0) wgetchar=1; if(m!=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); strcat(str1, str); strcpy(str, c:osfilefile); strcat(str, str1); strcat(str, .txt); /文件路径char str23;int choice=3;strcpy(str2,ab);printf(You can choise 0-Covered W 1-Additonal W:); /选择追加还是覆盖scanf( %d, &choice);if(choice = 0) /0-覆盖 strcpy(str2, wb); fp_file=fopen(str, str2); /打开文件 length=WriteF1(); ufdk-ufdfilei.flength=ufdk-ufdfilei.flength+length; /修改文件长度if(choice = 0)ufdk-ufdfilei.flength=length; printf(nnYou have write file successfully!);fclose(fp_file); /关闭文件 wgetchar=0; else if(ifopenki.openmode=0) /文件处于只读状态,不允许写 printf(nError.%s 文件以只读状态打开,不允许写!n, fname); wgetchar=1; else printf(nError.%s 文件处于关闭状态,请先打开!n, fname); wgetchar=1; else printf(nError.%s 文件不存在!n, fname); /文件不存在 wgetchar=1; Close:void CloseF() /*Close File*/ printf(nnC:%s,strupr(dirname); /显示路径 char fnameMAXNAME; /定义字符串变量 int i, k, n=0; if(strcmp(strupr(dirname), strupr(username)!=0) /关闭用户文件需在用户目录下 printf(nError!请确认您要关闭的是在用户目录下!n); else printf(nnOpened File(s) List:n); /罗列已处于打开的文件k=ExistD(dirname);for(i=0;iufdfilei.fname);n+;if(n%4=0)&(n!=0) printf(n);printf(n%d 文件已被打开!n,n);if (n=0) wgetchar=1; 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文件已经被关闭!n, fname); else /将文件关闭 ifopenki.ifopen=0; ifopenki.openmode=4; printf(%s has been closed successfully!, fname); else printf(nError.%s文件不存在n, fname); 【测试结果】(此部分请同学们自己动手操作)Login:Help:Create:Open:Read:Write:1additional添加后变为:0covered覆盖后变为:Close:Attrib:Delete:Dir:Cls:(清屏)Exit:【设计总结】首先通过这次的操作系统课程设计,让我认识到了实际的编程操作并不难,难的是对过程的设计,功能的定义以及最后的程序流程图的设计。其次说一下我的认识,这次的课程设计使我对一些东西有了更加深刻的认知和了解,更重要的是巩固了新学的知识,以及对旧的知识进行了复习与了解,对一些细节方面的东西也有了更深刻的理解,所以这一次实践的机会,让我体会到了自己的不足之处,在以后的学习过程中,会加倍的认真努力。让我对文件的操作更加熟练了,并且对Linux有了初步的了解。其实这次课程设计,不能说很困难:老师已经把大体的架构给我们了,我们需要添加的仅是四个功能的设计(open、write、delete、close)但是它又不是很容易,我们需要把整个的程序弄清,各个变量以及语句都要明白记住,这会关联到我们所定义的四个功能。总算是把这次的课程设计搞定了,最让我开心的是课设完成之后看着自己的作品。程序完整运行成功的那一瞬间最令我激动。总之,这次的课设使我重新认识了不少,以后我会更加努力!【参考文献】计算机操作系统教程(第三版). 张尧学 史美林 张高计算机操作系统,西安电子科技大学出版社,方敏主编,2004.8
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!