




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计报告操作系统课程设计报告专 业:软件工程学 号:姓 名:马提交日期:2017/1/10【设计目的】1、 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现2、 结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统3、通过对实际问题的分析、设计、编程实现,提高学生实际应用、编程的能力 【设计内容】为Linux系统设计一个简单的二级文件系统。要求做到以下几点:1.可以实现下列几条命令:login 用户登录dir 列目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write
2、写文件cd 进出目录2列目录时要列出文件名,物理地址,保护码和文件长度3源文件可以进行读写保护【实验环境】C+DevCpp【设计思路】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2并以编号作为物理地址,在目录中进行登记。结构体:typedef struct /*the structure
3、 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 ufdfileMA
4、XCHILD; /*ufd own file*/OSUFD; /用户下面的文件 typedef struct /*the structure of OSUFD'LOGIN*/ 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
5、,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
6、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 Find
7、PANo() /*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 W
8、riteF1() /*write file相当于置换文件*/程序流程说明:整体流程:开始Login(Name/Pw/Cpw)创建文件打开文件删除文件写文件更改目录修改文件属性读文件关闭文件退出系统清屏添加覆盖结束各部分功能流程:Open: N N YDelete:开始Delete主目录是否为空?Y确认删除文件在用户目录下!N用户是否在用户目录下? N只能修改用户目录下的文件!Y接收删除文件名获取文件文件被打开或被保护?Y打开或被保护状态不可删除N获取物理块号文件向前移动删除文件,文件数减一删除文件成功!结束Write:开始Write用户是否在目录下?N文件不存在! Y获取文件 确认该文件被打开
9、文件权限为只写或读写 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; /定义两
10、个字符串变量 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 < fcounti; a+) /
11、遍历用户文件 if(strcmp(fname, ufdi->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; /将文件的模
12、式置为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) /判断主目录是
13、否为空 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(
14、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
15、 fpaddrno1=ufdk->ufdfilei.fpaddr; /获取文件的物理地址块号 fpaddrnofpaddrno1=0; /回收物理地址块号 for(j=i; j<fcountk; j+) /将文件都向前移动 ufdk->ufdfilej=ufdk->ufdfilej+1; /将j+1位置为j strcpy(str , "c:osfilefile"); itoa(fpaddrno1, str1, 10); /将整数转化为字符串 strcat(str, str1); strcat(str, ".txt");/连接 re
16、move(str); /删除物理文件 fcountk-; /文件个数减一 printf("n'%s'is 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;
17、/定义整形变量 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
18、(dirname); /获取用户文件信息 for(i=0; i<fcountk; i+) /遍历用户下的文件 if(ifopenki.ifopen=1) /文件处于打开状态 printf("%15s", ufdk->ufdfilei.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("nPle
19、ase 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(s
20、tr1, 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, &
21、quot;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)
22、 /文件处于只读状态,不允许写 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(&quo
23、t;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;i<fcountk;i+)if
24、(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("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&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公楼租赁运营及物业管理服务协议详解
- 医疗美容行业面部注射服务协议
- 2025-2026学年人教版(2024)八年级地理第一学期第三章 中国的自然资源单元测试(含答案)
- 互联网电商平台用户隐私保护协议
- 叙事作文迷路550字(12篇)
- 合作推广市场调研及分析协议
- 中级财务会计(第六版)课件 6. 固定资产
- 肋骨畸形性骨炎CT诊断课件
- 2025年教师招聘之《幼儿教师招聘》基础试题库及答案详解(名师系列)
- 2025年教师招聘之《幼儿教师招聘》练习题库及答案详解【必刷】
- 酒店餐饮部SOP(标准操作手册)
- 冶金机修安全培训课件
- 2022城市轨道交通列车驾驶员技能及素质要求第1部分:地铁、轻轨和单轨
- 小型公司合伙合同范本
- 2025年宿迁市公需考试试题
- 个人信息处理权转让协议(2025年数据安全法合规版)
- 学生作文稿纸(A4打印)
- 2025中国电信浙江公司社会招聘179高频重点提升(共500题)附带答案详解
- 抗菌药物DDD速查(2025版)
- 【MOOC】走向深度的合作学习-爱课程 中国大学慕课MOOC答案
- (高清版)DB43∕T 1292-2017 地理标志产品 东江鱼
评论
0/150
提交评论