




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准文案精彩文档操作系统课程设计报告专 业:软件工程学 号:姓 名:马提交日期:2017/1/10【设计目的】1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现2、结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步 理解操作系统3、通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力【设计内容】为Linux系统设计一个简单的二级文件系统。要求做到以下几点:1.可以实现下列几条命令:logi n用户登录dir列目录create创建文件delete删除文件ope n打开文件close关闭文件read读文件write写文件cd进出目
2、录2 .列目录时要列出文件名,物理地址,保护码和文件长度3 源文件可以进行读写保护【实验环境】C+DevCpp【设计思路】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。 如:file0,file1,file2 并以编号作为物理地址,在目录中进行登记。结构体:typedef struct /*the structure of
3、OSFILE*/intfpaddr;/*file physical address*/intflen gth;/*file len gth*/intfmode;/*file mode:0-ReadOn ly;1-WriteOn ly;2-Readand Write;3-Protect;*/char fnameMAXNAME;/*file n ame*/ OSFILE;/存放重要信息 typedef struct /*the structure of OSUFD*/char ufdn ameMAXNAME;/*ufd n ame*/OSFILE ufdfileMAXCHILD;/*ufd own
4、 file*/OSUFD;/用户下面的文件typedef struct /*the structure of OSUFD'LOGIN*/char ufdn ameMAXNAME;/*ufd n ame*/char ufdpword8;/*ufd password*/ OSUFD_LOGIN;typedef struct/*file ope n mode*/int ifope n;/*ifope n:0-close,1-ope n*/int ope nm ode;/*0-read onl y,1-write onl y,2-read and write,3-i nitial*/OSUFD
5、_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
6、 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 *file name) /*Whether FileName Exist,Exist-i,Not Exist-0*/ int Fin dPANo
7、()/*find out physical address num*/void SetPANo(i nt RorW) /*Set physical address num,0-read,1-write*/void In putPW(char *password)/*in put password,use '*' replace*/char *ltrim(char *str) /*remove the heading blanks.去除左空白 */char *rtrim(char *str) /*remove the trailing blanks.去除右空白 */int Wri
8、teF1() /*write file相当于置换文件 */实用标准文案程序流程说明:整体流程:开始Login (Name/Pw/Cpw )创打建精;彩文档文文件件实用标准文案精彩文档各部分功能流程:Open :Delete :YW接收删除文件名屮获取文件Y获取物理块号文件向前移动删除文件,文件数减一实用标准文案Write屮结束开始获取文件确认该文件被打开实用标准文案精彩文档获取路径覆盖追加结束Close :开始罗列已经打开的文件获取文件名获取物理地址关闭文件【源程序清单】Open :void Ope nF () /*Ope n File*/prin tf("nnC:%s>&qu
9、ot;,strupr(dirname);/显示当前路径int fcoun, i;/定义两个整形变量char fnameMAXNAME, fmode25;/定义两个字符串变量int fmod;/文件模式prin tf("nPlease input FileName:");gets(fname);/接收打开文件的文件名ltrim(rtrim(fname);/去除左右空白if(ExistF(fname)<0)/判断文件是否存在/不存在printf("nError.文件名 '%s'不存在 n", fname);wgetchar=1; els
10、e /存在i=ExistD(username);/获取用户物理信息for(i nt a=0; a < fcoun ti; a+)/遍历用户文件if(strcmp(fname, ufdi->ufdfilea.fname)=0)/找到文件fcoun=a;break;ifopenifcoun.ifopen=1;/将文件状态置为打开状态prin tf("Pleasein putOpe nM ode(0-Read Only, 1-Write Only, 2-Read and Write,3-Protect ):");/打开文件模式gets(fmode);fmod=atoi
11、(fmode);ifope nifc oun .ope nm ode=fmod;Ope nM odeprin tf("nOpe n Successed"); wgetchar=1;/获取模式/将字符串转换为整型/将文件的模式置为Delete :void DeleteF() /*Delete File*/prin tf("nnC:%s>",strupr(dirname);char fnameMAXNAME, str50, str150;int i, k, j;/显示路径/定义三个字符串变量/记录文件物理地址块号int fpaddr no1;if(st
12、rcmp(strupr(ltrim(rtrim(dirname), "")=0)/ 判断主目录是否为空prin tf("nError.请确认您要删除的是否在用户目录下!n");wgetchar=1;if(strcmp(strupr(dirname),strupr(username)!=0)/ 判断用户是否在用户目录下prin tf("nError. wgetchar=1; else prin tf("nPlease in put FileName:"); gets(fname);ltrim(rtrim(fname); i=E
13、xistF(fname);if(i>=0) k=ExistD(username); if(ifope n ki.ifope n=1)prin tf("n Error.'%s'您只能删除修改自己用户目录下的文件哦!n");/接收删除的文件名/去除文件名的左右空白/用户文件位置/获取用户所在存储位置/文件状态处于打开状态,不许删除处于打开状态!请先关闭哟!n", fname);wgetchar=1; else if(ufdk->ufdfilei.fmode=3)/ 保护文件,不可删除prin tf("nError.'%s&
14、#39;处于被保护状态!请先关闭哟! n", fname);wgetchar=1; else /获取文件的物理地fpaddrno仁ufdk->ufdfilei.fpaddr;址块号/回收物理地址块号/将文件都向前移动j+1; /将j+1位置为j/将整数转化为字符/连接/删除物理文件/文件个数减一/文件不存在fpaddr no fpaddr no1=0;for(j=i; j<fc oun tk; j+)ufdk->ufdfile j=ufdk->ufdfilestrcpy(str , "c:osfilefile");itoa(fpaddrno
15、1, str1, 10);strcat(str, str1); strcat(str, ".txt"); remove(str); fcoun tk-;prin tf("n'%s'is deleted successfully.n", fname);wgetchar=1; else prin tf("nError.'%s' 文件不存在! n", fname);wgetchar=1;Write :void WriteF() /*Write File*/prin tf("nnC:%s>&qu
16、ot;,strupr(dirname);int i, k, m=0;int len gth;char fnameMAXNAME;char str255, str1255;if(strcmp(strupr(dirname),户目录下strupr(user name)!=0)/显示用户路径/定义整形变量/定义长度整形变量/定义文件名字符串/定义两个字符串变量/判断用户是否在用prin tf("nError!请确认您要写的在用户目录下!n ”);wgetchar=1;return;prin tf("n请先打开文件!n");printf("Opened File
17、(s) List:n");k=ExistD(dir name);/获取用户文件信息/遍历用户下的文件/文件处于打开状态/每创建4个文件换/创建文件/接收文件名/去除左右空白/获取文件物理地址/文件存在/文件处于打开状态|ifope n ki.ope nm ode=2)for(i=0; i<fc oun tk; i+)if(ifope n ki.ifope n=1) printf("%15s", ufdk->ufdfilei.fname); m+;if(m%4 = 0 && m!=0)一行prin tf("n");pr
18、in tf("n%d文件已经打开啦!n", m);if(m = 0)wgetchar=1;if(m!=0)prin tf("nPlease in put FileName:"); gets(fname);ltrim(rtrim(fname);i=ExistF(fname);if(i>=0) if(ifope n ki.ifope n=1) if(ifope n ki.ope nm ode=1/文件权限是只写或读写itoa(ufdk->ufdfilei.fpaddr, str, 10);/ 获取文件路径strcpy(str1, "fi
19、le");strcat(str1, str);strcpy(str, "c:osfilefile");strcat(str, str1);strcat(str, ".txt");/ 文件路径char str23;int choice=3;strcpy(str2,"ab");prin tf("You can choise 0-Covered W 1-Addit onal W:");/选择追加还是覆盖scanf(” %d", & choice);if(choice = 0)/0-覆盖strc
20、py(str2, "wb");fp_file=fopen(str, str2);/ 打开文件len gth=WriteF1();ufdk->ufdfilei.fle ngth=ufdk->ufdfilei.fle ngth+le ngth;/修改文件长度if(choice = 0)ufdk->ufdfilei.fle ngth=le ngth;prin tf("nnYou have write file successfully!");fclose(fp_file);/ 关闭文件wgetchar=O; else if(ifope n k
21、i.ope nm ode=0) 不允许写fname);/文件处于只读状态,printf("nError.'%s'文件以只 读状态打开,不允 许写! n",wgetchar=1; else prin tf("nError.'%s'文件处于关闭状态,请先打开! n", fname);wgetchar=1; else printf("nError.'%s' 文件不存在! n", fname);/ 文件不存在wgetchar=1;Close :void CloseF() /*Close File
22、*/printf("nnC:%s>",strupr(dirname);/ 显示路径char fnameMAXNAME;/定义字符串变量int i, k, n=0;if(strcmp(strupr(dirname), strupr(username)!=0)/ 关闭用户文件需在用户目录下prin tf("nError!请确认您要关闭的是在用户目录下!n"); else printf("nnOpened File(s) List:n");/ 罗列已处于打开的文件k=ExistD(dir name);for(i=0;i<fc o
23、un tk;i+)if (ifopenki.ifopen=1)/ 文件处于开启状态if(ifope n ki.ope nm ode=0)|(ifope n ki.ope nm ode=2)/只读或者读写状态prin tf("%15s",ufdk->ufdfilei.fname);n+;if( n%4=0)&&(n!=0) pri ntf("n");prin tf("n%d文件已被打开!n", n);if (n=0) wgetchar=1;/接收关闭文件的文件名/除去首尾空格/获取文件物理地址/获取用户文件信息/文件处于关闭状态prin tf("nPlease in put FileName:"); gets(fname);ltrim(rtrim(fname); i=ExistF(fname);if(i >= 0)k=ExistD(username);if(ifope n ki.ifope n=0)printf("nError! '%s'文件已经被关闭!n", fname); else /将文件关闭ifope n ki.ifope n=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 补偿合同(标准版)
- 西藏自治区财政厅直属事业单位招聘考试真题2025
- 临沧市乡村产业发展集团有限公司招聘考试真题2024
- 2025年度勘察设计注册环保工程师资格考试水污染防治复习题及答案
- 综合解析人教版八年级物理上册第5章透镜及其应用重点解析试卷(含答案详解)
- 2025年万科物业客服试题及答案
- 2025年道路运输企业主要负责人和安全生产管理人员考试(主要负责人)自测试题及答案
- 考点解析人教版八年级上册物理物态变化《熔化和凝固》章节练习试卷(详解版)
- 湖南省益阳市注册环保工程师考试(大气污染防治专业案例)全真模拟题库及答案(2025年)
- 2025年互联网营销师(直播销售员)四级理论考核试题及答案
- 2025年度以新质生产力助推高质量发展等继续教育公需科目试题及答案
- 思想道德与法治2023年版电子版教材-1
- 运筹学02375计算题经典题型全攻略
- 移动公司县级分公司总经理竞职演讲稿
- 投标评标项目经理答辩题库题
- JJG 564-2019重力式自动装料衡器
- GB/T 4889-2008数据的统计处理和解释正态分布均值和方差的估计与检验
- GB/T 15317-2009燃煤工业锅炉节能监测
- 消防知识测试题库(1000道含各题型)
- 《轴承的失效分析》教学课件
- 部编人教版六年级道德与法治上册全册教学课件
评论
0/150
提交评论