版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计报告专 业:软件工程学 号:姓 名:马 提交日期: 2017/1/10实用标准文案【设计目的 】1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现2、结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步 理解操作系统3、通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力 【设计内容 】为 Linux 系统设计一个简单的二级文件系统。要求做到以下几点:1.可以实现下列几条命令:login用户登录dir列目录create创建文件delete删除文件open打开文件close关闭文件read读文件write写文件cd进出
2、目录2列目录时要列出文件名,物理地址,保护码和文件长度3源文件可以进行读写保护精彩文档实用标准文案【实验环境 】C+DevCpp【设计思路 】本文件系统采用两级目录, 其中第一级对应于用户账号, 第二级对应于用户帐号下的文 件。另外, 为了简便文件系统未考虑文件共享, 文件系统安全以及管道文件与设备文件等特 殊内容。首先应确定文件系统的数据结构: 主目录、 子目录及活动文件等。 主目录和子目录都以 文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。 如: file0,file1,file2 并以编号作为物理地址,在目录中进行登记。结构体:typedef struc
3、t/*the structure of OSFILE*/intfpaddr;/*file physical address*/intflength;/*file length*/intfmode;/*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*/OSFI
4、LE 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-i
5、nitial*/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 C
6、loseF(); /*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
7、,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.去除右空
8、白 */int WriteF1() /*write file 相当于置换文件 */精彩文档实用标准文案程序流程说明:整体流程:开始Login ( Name/Pw/Cpw )创打建精彩文档开文文件件实用标准文案精彩文档实用标准文案各部分功能流程:Open :精彩文档实用标准文案精彩文档实用标准文案Delete :精彩文档实用标准文案接收删除文件名获取文件获取物理块号文件向前移动删除文件,文件数减一精彩文档实用标准文案结束Write开始获取文件确认该文件被打开实用标准文案获取路径覆盖精彩文档追加结束实用标准文案Close :开始罗列已经打开的文件获取文件名获取物理地址精彩文档实用标准文案关闭文件源
9、程序清单 】精彩文档实用标准文案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
10、不存在 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);ifopenifc
11、oun.openmode=fmod;OpenModeprintf(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),
12、 )=0) / 判断主目录是否为空printf(nError. 请确认您要删除的是否在用户目录下! n);wgetchar=1;if(strcmp(strupr(dirname), strupr(username)!=0) / 判断用户是否在用户目 录下printf(nError.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.%
13、s您只能删除修改自己用户目录下的文件哦!n);/ 接收删除的文件名/ 去除文件名的左右空白/ 用户文件位置/ 获取用户所在存储位置/ 文件状态处于打开状态, 不许删除处于打开状态!请先关闭哟! n, fname);wgetchar=1; else if(ufdk-ufdfilei.fmode=3) / 保护文件, 不可删除printf(nError.%s 处于被保护状态!请先关闭哟! n, fname);精彩文档实用标准文案wgetchar=1;/ 获取文件的物理地 else fpaddrno1=ufdk-ufdfilei.fpaddr;址块号/ 回收物理地址块号/ 将文件都向前移动j+1;
14、/ 将 j+1 位置为 j/ 将整数转化为字符/ 连接/ 删除物理文件/ 文件个数减一/ 文件不存在fpaddrnofpaddrno1=0;for(j=i; jufdfile j=ufdk-ufdfilestrcpy(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 文件不存在!
15、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
16、);wgetchar=1;return;printf(n 请先打开文件! n);printf(Opened File(s) List:n);k=ExistD(dirname);/ 获取用户文件信息精彩文档/ 遍历用户下的文件/ 文件处于打开状态/ 每创建 4 个文件换/ 创建文件/ 接收文件名/ 去除左右空白/ 获取文件物理地址/ 文件存在/ 文件处于打开状态| ifopenki.openmode=2) 实用标准文案for(i=0; iufdfilei.fname);m+;if(m%4 = 0 & m!=0)一行printf(n);printf(n%d 文件已经打开啦! n, m);if(m
17、= 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精彩文档实用标准文案/ 文 件 权 限是只写或读写itoa(ufdk-ufdfilei.fpaddr, str, 10); / 获取文件路径 strcpy(str1, file);strcat(str1, str);strcpy(str, c:osfilefile);strcat(str,
18、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;/ 修改文件长度 i
19、f(choice = 0)精彩文档实用标准文案不允许写fname);ufdk-ufdfilei.flength=length;printf(nnYou have write file successfully!);fclose(fp_file); / 关闭文件wgetchar=0; else if(ifopenki.openmode=0) / 文件处于只读状态, printf(nError.%s文 件 以 只 读 状 态 打 开 , 不 允 许 写 ! n,wgetchar=1; else printf(nError.%s 文件处于关闭状态,请先打开! n, fname);wgetchar=1
20、; 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
21、 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年外研衔接版选修3历史上册月考试卷含答案
- 服务类招标续签合同范本(2篇)
- 2025年粤教沪科版高二地理下册阶段测试试卷含答案
- 2025年外研版高一物理上册阶段测试试卷
- 2025年广州涉外经济职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 2025年广州体育职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年四川希望汽车职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 2025年四川卫生康复职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年南京城市职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025至2031年中国聚酯薄膜纤维纸行业投资前景及策略咨询研究报告
- 法理学课件马工程
- 2024-2030年中国香菇行业销售状况及供需前景预测报告
- 2024年广东省公务员录用考试《行测》真题及解析
- 高中英语必背3500单词表(完整版)
- 2024年版《输变电工程标准工艺应用图册》
- 2024年高考数学试卷(北京)(空白卷)
- 人教版2024年新教材七年级上册英语starter unit 1 -unit7重点短语句型清单
- 护理服务在产科中的应用课件
- 2024年小升初语文入学分班测试卷四(统编版)
- 流行文化对青少年价值观的影响研究
- 中国保险行业协会官方-2023年度商业健康保险经营数据分析报告-2024年3月
评论
0/150
提交评论