ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:27.41KB ,
资源ID:6625753      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6625753.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(模拟文件系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

模拟文件系统.docx

1、模拟文件系统操作系统实习报告 日期: 实习题目: 模拟文件系统完成人姓名:组号:学号实习内容简要描述构建一棵树形结构的文件系统,要求程序模拟简单的dos文件系统的命令功能Cd:类似dos的cd命令Edit:创建文件Del: 删除文件Rd:删除目录Dir:显示目录Md:创建目录主要代码结构(附注释)#include #include #include #include #include #define FILENAME_LEN 21#define INPUT_LEN 81#define COMMAND_LEN 11/结点结构struct FileNode char filenameFILENAM

2、E_LEN; /文件名/目录名 int isdir; /目录文件识别标志 int i_nlink; /文件的链接数 int adr; /文件的地址 struct FileNode *parent, *child;/指向父亲的指针和指向左孩子的指针 struct FileNode *sibling_prev, *sibling_next;/指向前一个兄弟的指针和指向 /后一个兄弟的指针;void Init(); /初始化文件树int ParseCommand(); /接受输入的命令并把其分解成操作名和路径文件名void ExecuteCommand(); /执行命令int cdComd(); /

3、处理cd命令int editComd(); /处理edit命令int delComd(); /处理del命令int rdComd(); /处理rd命令int dirComd(); /处理dir命令int mdComd(); /处理md命令int FindPath(char *ph);/寻找参数ph所指向的路径/从参数Para2中找到要建立或删除的文件、目录名,并把指针指向其父亲结点int FindFilename(char Para2);struct FileNode* CreateFileNode(char filename,int isdir,int i_nlink);/创建结点int G

4、etInput(char* buffer,unsigned int buffer_len);/获取输入int CheckCommand(); /命令检查int GetDir(int begin,char* path,char* curDir);/获取路径void Trim(char* str);struct FileNode * cp, *tp, *root,*upper;char pathINPUT_LEN-COMMAND_LEN;/记录当前走过的路径char curpathINPUT_LEN-COMMAND_LEN,Para1COMMAND_LEN,Para2INPUT_LEN-COMMA

5、ND_LEN,tmppathINPUT_LEN-COMMAND_LEN;char filenameFILENAME_LEN,dirnameFILENAME_LEN,tmp;int i,j;/主函数int main() Init();/初始化文件树 while(1) if(ParseCommand()/分解命令 ExecuteCommand();/执行命令 /执行命令子函数void ExecuteCommand() int sign; /根据参数Para1调用相应的功能处理模块 if(strcmp(Para1,cd)=0) sign=cdComd(); /cd命令 else if(strcmp(

6、Para1,edit)=0) sign=editComd(); /edit命令 else if(strcmp(Para1,del)=0) sign=delComd(); /del命令 else if(strcmp(Para1,dir)=0) sign=dirComd(); /dir命令 else if(strcmp(Para1,md)=0) sign=mdComd(); /md命令 else if(strcmp(Para1,rd)=0) sign=rdComd(); /rd命令 else if(strcmp(Para1,exit)=0) exit(0); /exit命令 else printf

7、(命令错误,请重试n); /命令输入不正确,报错/创建结点struct FileNode* CreateFileNode(char filename,int isdir,int i_nlink) /申请结点空间 struct FileNode* node=(struct FileNode*)malloc(sizeof(struct FileNode); /相应内容赋初值 strcpy(node-filename,filename); node-isdir=isdir; node-i_nlink=i_nlink; node-parent=NULL; node-child=NULL; node-s

8、ibling_prev=NULL; node-sibling_next=NULL; return node;/初始化文件树void Init() struct FileNode *bin,*usr,*unix,*etc; strcpy(path,/); /根目录为当前目录 / /创建初始目录结点/ bin = CreateFileNode(bin,1,0); usr = CreateFileNode(usr,1,0); unix = CreateFileNode(unix,0,0); etc = CreateFileNode(etc,1,0); root = cp = tp = CreateF

9、ileNode(/,1,0); / /创建初始目录结点结束/ / /初始目录赋值/ root - parent = NULL; root - child = bin; root - sibling_prev = root - sibling_next = NULL; bin - parent = root; bin - child = NULL; bin - sibling_prev = NULL; bin - sibling_next = usr; usr - parent = NULL; usr - child = NULL; usr - sibling_prev =bin; usr -

10、sibling_next = unix; unix - parent = NULL; unix - child = NULL; unix - sibling_prev = usr; unix - sibling_next = etc; etc - parent = NULL; etc - child = NULL; etc - sibling_prev = unix; etc - sibling_next = NULL; / /初始目录结点赋值结束/ system(color 0E); printf(nnnnnnnnnttt 欢迎来到模拟文件管理系统); printf(nnnnnnnnnnnn

11、nnnPress any key continue.); getch(); system(cls); printf(你可以输入如下命令进行操作:n); printf(-n); printf(t cd 路径转换n); printf(t edit 创建文件n); printf(t del 删除文件n); printf(t rd 删除目录n); printf(t dir 显示目录n); printf(t md 创建目录n); printf(-n);/获取文件或目录名,并把指针指向其父亲结点int FindFilename(char Para2) i=strlen(Para2)-1; j=0; whi

12、le(Para2i!=/& i=0) filenamej=Para2i; i-; j+; filenamej=0;/获得逆序的文件或目录名,存入filename中 if(i0) Para2i+1=0; else Para2i=0; j-; /filename逆转,获得正确的文件或目录名 for(i=0;i0) int sign=FindPath(Para2); if(sign=0) return 0; return 1;/缓冲区安全输入子函数/如果输入超过buffer_len,则截取前buffer_len-1长度的输入,/buffer_len处字符用/0代替int GetInput(char*

13、 buffer,unsigned int buffer_len) int count=0; while(count,path); /获取输入 if(GetInput(Inputs,INPUT_LEN)=-1) printf(输入行太长。n); return 0; Para10=Para20=0; /获取参数Para1,即操作名 while(Inputsi!= & Inputsi!=0 & iCOMMAND_LEN-1) Para1i=Inputsi; i+; /while Para1i=0; /输入命令太长 if(i=(COMMAND_LEN-1)return 1; /获取参数2,即路径文件名

14、 if(Inputsi!=0) while(Inputsi= & iINPUT_LEN-1) i+; j=0; while(Inputsi!=0 & iINPUT_LEN-1) Para2j=Inputsi; i+; j+; Para2j=0; Trim(Para1); Trim(Para2); /将操作名全部转换成小写字母 for(k=0;ksibling_prev) cp=cp-sibling_prev;/找到这一层最左边的结点 if(cp-parent) cp=cp-parent; /找到父亲结点 else return 0; /对当前路径进行相应处理 i=strlen(path); w

15、hile(pathi!=/& i0) i-; if(i!=0) pathi=0; else pathi+1=0; else FindPath(Para2);/查找路径 return 1;/命令格式处理子函数void Trim(char* str) int begin,end; char* tmp; begin=0; end=strlen(str); /找到字符串第一个非空格的位置 while(strbegin= & strbegin!=0)begin+; /去除字符串尾部空格 while(str-end= ); strend+1=0; /除去空格 if(beginend) tmp=(char*

16、)malloc(sizeof(char)*(end-begin+2); strcpy(tmp,&strbegin); strcpy(str,tmp); free(tmp); /获取当前目录名子函数int GetDir(int begin,char* path,char* curDir) int i=0; int len=strlen(path); while(!(pathbegin= )| (pathbegin=/)&beginchild; i+; /滤过/ strcpy(path,/); else if(cp!=NULL & cp!=root ) strcat(path,/); if(cp

17、& cp-child) if(cp-isdir) cp=cp-child; /指针指向当前目录的左孩子 else printf(路径错误!n); return 0; while(ichild) i+;/略过 / if(cp-isdir) cp=cp-child;/继续查找下级目录 else printf(路径错误!n); return 0; strcat(path,/); /curpath 记录当前要找的路径名 while(phi!=/& ifilename,curpath)!=0 | (cp-isdir!=1)& cp-sibling_next!=NULL) cp=cp-sibling_ne

18、xt; if(strcmp(cp-filename,curpath)=0 ) if(cp-isdir=0) strcpy(path,oldpath); cp=temp; printf(是文件不是目录.n); return 0; strcat(path,cp-filename); if(strcmp(cp-filename,curpath)!=0 | cp=NULL) strcpy(path,oldpath); cp=temp; printf(输入路径错误n); return 0; return 1;/创建文件子函数int editComd() char tmp; struct FileNode

19、 * temp=CreateFileNode(,0,0); int sign; struct FileNode *tp; /路径不能为空 if(strlen(Para2)=0) printf(n命令格式有错误.n); return 0; /长度检查 if(strlen(Para2)50) printf(n文件名过长n); return 0; /格式检查 if (!(isalpha(Para20)|Para20=_|Para20=0|Para20=/) printf(文件名格式有错!n);/* 文件首字母可以为字母或数字或_或/或回车*/ return 0; /获取文件名 sign=FindFi

20、lename(Para2); if(sign=0) return 0; if(cp-isdir!=1)/如当前指针指向的是文件,则报错 printf(you cannot edit a file in under a file!n); return 0; /创建文件结点,并插入到指定目录下 tp=CreateFileNode(,1,0); strcpy(tp-filename,filename); tp-isdir=0; tp-i_nlink=0; if(cp-child=NULL) tp-parent=cp; tp-child=NULL; cp-child=tp; tp-sibling_pr

21、ev=NULL; tp-sibling_next=NULL; else temp=cp; /用temp找到新结点插入处 temp=temp-child; while(temp-sibling_next )/find the last sibing node temp=temp-sibling_next; if(strcmp(temp-filename,filename)=0&temp-isdir=0) printf(此文件名已存在n);/重名报错 return 0; /找到了最后一个结点 temp-sibling_next=tp; tp-parent=NULL; tp-child=NULL; tp-sibling_prev=temp; tp-sibling_next=NULL; return 1;/创建目录子函数int mdComd()

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1