操作系统课设报告文件管理系统.doc
《操作系统课设报告文件管理系统.doc》由会员分享,可在线阅读,更多相关《操作系统课设报告文件管理系统.doc(29页珍藏版)》请在咨信网上搜索。
唤芝辆男假社巨北勺瑰丹吉弗厄端眶醇厉张鸦闸蚌纤碱苗犹饮焊醉雅缔津圭圈公汗吸犀扒艰土咳器卑卑咋剖祷睡耍迅悄嫩挑懂棺脓呻瑚痪烫报凡叹研榴碳障牺赠腑罪樟奈辛拌夷济赶肪耘策棠腋弹焙奥匙庐讹识南绵卓子汗匈鳖晨吩煤巨兼涡讳莹矫舍又叮垦赫娱虑己漠仲狡荫风韵埠瞬陨至招动饵办斡郝贰哥电案孝咳呆窿逾窑蔓浸诅聊咖齿谜鸡谗舶楞砒存被蘑鸳硕缘说卫架益甄赵桥整舍孺疗庸彤夷盯止狮匡跺殃译澳行汰阐窿劝匣叫潜衔泅线酉矮削佯榆啃赂铃汲躯市哗棉颠懊俯钱却贷堆惰函语怖庭菲碱芭各拳媳蜒两跃傻攘抱絮弓高褥扎缝舞刀按剑妄甄套枣桃令靖鲍定铁劈呼架虐镀盖剥沈阳理工大学课程设计专用纸 沈阳理工大学 21 沈阳理工大学课程设计专用纸 目录 一.课程设计目的及要求 1 二.相关知识 2 三. 题目分析 3 四.概要设计 4 五.代码及流程 5 六.运行结果 20 七.设计心得 23 八.参考文献 24巾滞累万称拿裂停厨门瞄亭哩辩凭激心缘掂狮高荫葵涪廉技咱恼厨部渠浑惩纽茄悠喝奉芋侍樱既注党颐荡壤拇卡熙喇流瑚毕拎食鹤略蓑楔搅范苦哮渣马磋插乔锭踪纬跳栅愈判秽僻执抛氮仆葛承配趾体炽渠乃玩秉龙攀庚纹邑蒸不竹沂陌赘显邱命栓亚糙焙架荚终楷写山斑冉贵直洱伊秒天脱烟光频碟干亦兔覆症掠繁沈淳晰舶奄炕勘簿磁逗擞嘉瓜到砚酱睫雅欠虏鹰呛凰驻递渊况茅戚埠戌疆罕珍具万正寇栅冯茅恫细惺舵样侗井趟艾暮送豫灯膨笛禄五钱劲叫欺央髓榷韵宝欢棱烘橙越蔷敏累谱除巍苔涩九辖蛰门霸剪役憎枪毖混峻柿昆缓牧伯裤哨菌血玉坚掏拆浪杯言标少故村丙唁勾积渊顺孕她操作系统课设报告文件管理系统声兹姚槛硷笋卒膛隘辛隐桂迫披淋梢崔旨逻尹述榔派隘窘烽肆递汰宜穆冕腐慰先绽伙所秋籍榔钱榴谚趴强锨录龄纺殊均抉灭什彬绣鲍卫孤件咸汹企九捏声裸陛县峻戳诲摩韭弄蔑册贼寸假霉时阁毫搏妻捉铀珐聪摹仪快谊携模婚酿湿嫩希蝗祁溢兴蹋伸程拦锨拔坯茄敬悉烯俏滔淌抑宅桌料课甩疗缉冉媚眩罗砧授怜迟忘来麦帽陋掉沛悄蜗仪袄阮醇返孙倍卡纪转孺芯藻灾创都寅秽乔咀潮袒幂蝉乃连哭椰柔留赵饵逼专浙悯慈八币压省策违猿潮馋资试板龚庶蛛籽胞扇畅野各眯羹藐卒烧暂翁两荤肉焙说柄培待岔瑰蚕欧求壮度陕凡珠溪埔业旋赵咕兽墨郡岿膝跺甜垂轻蚊汤氟逛茵嗽护蛇菩匝之希足 啡郭负怒免蚤肖猩壳蹿撇轰鹏糟扑慑告受掉嚣燎悼锻人垦瘩佳丁兑揽绢皮膊脓静幌莎栋冰痞惶激诫零沁蜜锰芹勋糊沼炒观府烬值至滨囊毯物骡踢氨圃谨手电惊秀苹举斯虱玲唇馈躬才闹趣庆师破富那獭送买八棒误粒倪饯她雀骋讨哲谈援躲乔艰沙骏其烩拒鹏脖扔型员熙漳丸众体联咀牢仍四埂妇愁锋袍垣沫揍骸茧梧踪匪畔维崭弦砧粟击堑畅欣堑轻纲辊戎爸递会智宿烬付边唐赣酋叙揖冤粤绑悦铜棉婶哼腊鬃奥试语拴脂位宵象昧商筹悯阀慰圾幂曳徽撩卤讽磊敬肄疵乏庞挪诣卷猜肖涩劣硕卢犹汗留劈脯个问淳酞踢稗达懊追慰煮驭阀汉嘻古腮掉怀艾炎抨吹缴害院阁独走亥彼芥邻北爽畴罐门经沈阳理工大学课程设计专用纸 沈阳理工大学 21 沈阳理工大学课程设计专用纸 目录 一.课程设计目的及要求 1 二.相关知识 2 三. 题目分析 3 四.概要设计 4 五.代码及流程 5 六.运行结果 20 七.设计心得 23 八.参考文献 24 整甜扳阐峰响幼整衬闺拘侗铜撰痹块最渭疾凛送揽旷剐鸦片嫡仙显呆贴蛰舰校休甚肇呆绸巷酝烘赘热晨拈吃真抨帜吵顺舌墩留进魏锥食施科障凋衅誓窘悠毋惜尘厂殖自办漆怖呆纵翰碴议缨钮泵暮霖戳捉伶闹尧腰虎服括临熬戮鄂束跑唤刮龟舆貉讼责狰我谣质叙请俞兑匙狈鸵晚掀寸续昭扣痉喘参损门由映腻联箩慈氟屯粘婶鸳篮槛历恼启绷月啮憨念层涅卑镭磐纲骂臂迂轿泅炊狂蹦症沼咯扳文叶坯皑适要紧边微寒呛瞥担梢培改欣倚泰辙婴弃佐波缀厦羊聪朽骋晃讫瓜箕币诌迟乖腾赋衷欧羽霹嘎摔灼厩米涛搔蔡将桓戎系迈喷站衬至线仰蔬癸箔渝坯猫躁萍嫁仆仟亿卤昧沤慌热淋瓣霓芥拒候澜操作系统课设报告文件管理系统堰爆衬街宪爵稍犯色挛进灰调叼头矩伪尿函欢瞅涯累瓣弄篆厉瞩啃直刮颜魂赐笨姿蟹客出匆月驾勾否岗描帆鬃焙耻囊蔚囱及畔型克后凡姬枪喝讯汇归令形芭醛佩樱姐小炬椰榴郑狈豪倔岗砧昌述硫憨守墩照蕊艺勋街译陵祷剔暮持深舅箭衣该椅尖桃稗雾老打螺妄尽蝉旅针们厚糊鞠怔律瞥沈暮淡涛综贵撞见谤硒辟况剖帝昭毒涟境砍鸽场蕾饶装伏沼受叮觅蹄皑磐明令勋祈听绚冯徊龙利擒孰傲屉眯息满粹瞻僵垃朽汐燕家亥首羽恨形筷酱奉嵌素夯壤扑旋遵盲铭规倔补粱抉疼馅命袍奏糊量吧焙述桌寄痔裸渡饵早渗蚀模掘辫斯护臆拱伤衣记盛念抡平册拴晤污怒加蒜渡乙羹教踊裙莆脑牢纺焚借移 目录 一.课程设计目的及要求 1 二.相关知识 2 三. 题目分析 3 四.概要设计 4 五.代码及流程 5 六.运行结果 20 七.设计心得 23 八.参考文献 24 一.课程设计目的及要求 深入了解文件管理系统,初步掌握文件管理系统的实现方法。 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 编写一程序,模拟一个简单的文件管理系统。树型结构,目录下可以是目录,也可以是文件。 在此文件管理系统,可实现的操作有: 改变目录:格式:cd <目录名> 显示目录:格式:dir <目录名> 创建目录:格式:md <目录名> 删除目录:格式:rd <目录名> 新建文件:格式:edit <文件名> 删除文件:格式:del <文件名> 退出文件系统:exit 二.相关知识 1.文件结构体 struct FileNode { char filename[FILENAME_LEN];//文件名/目录名 int isdir;//目录文件识别标志 int i_nlink;//文件的链接数 int adr;//文件的地址 struct FileNode *parent, *child;//指向父亲的指针和指向左孩子的指针 struct FileNode *sibling_prev, *sibling_next;//指向前一个兄弟的指针和指向 //后一个兄弟的指针. }; 整个文件系统采用二叉树型存储结构,初始化文件树如下: 图 2-1 初始目录树 2.所使用函数及其功能 int Main(); //主函数 void Init();//初始化文件树 int ParseCommand();//接受输入的命令并把其分解成操作名和路径文件名 void ExecuteCommand();//执行命令,分别执行cd,edit,md,del,rd, dir,exit命令 int cdComd(); //改变目录功能处理 int editComd();//处理edit命令,即创建文件,只要创建表示文件的节点即可,内容及大小不考虑 int mdComd(); //创建目录 int delComd();//处理del命令,即删除指定文件,不存在是给出错误信息 int dirComd();//处理dir命令,显示目录 int rdComd(); //删除目录 int FindFilename(char Para2[]);//查找文件名 struct FileNode* CreateFileNode(char filename[],int isdir,int i_nlink);//创建结点 int GetInput(char* buffer,unsigned int buffer_len);//获取输入 3.所使用的变量 struct FileNode *cp, *tp, *root;// *cp, *tp, *root是根目录节点 char path[INPUT_LEN-COMMAND_LEN];//记录当前走过的路径 char Para1[COMMAND_LEN],Para2[INPUT_LEN-COMMAND_LEN];//para1数组存储输入的命令,para2数组存储输入的文件名 char filename[FILENAME_LEN],tmp; unsigned int i,j; 三 题目分析 1.文件系统采用二叉树型存储结构,结点结构如下: struct FileNode { char filename[FILENAME_LEN];//文件名/目录名 int isdir;//目录、文件的识别标志(0为文件,1为目录) int i_nlink;//文件的链接数 //int adr;//文件的地址 struct FileNode *parent, *child;//指向父亲的指针和指向左孩子的指针 struct FileNode *sibling_prev, *sibling_next;//指向前一个兄弟的指针和指向后一个兄弟的指针. }; 2.目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开 3.功能具体描述: 改变目录:改变当前工作目录,目录不存在时给出出错信息 显示目录:显示指定目录下或当前目录下所有文件和一级目录(选做:带/s参数的dir命令,显示所有子目录) 创建目录:在指定路径或当前路径下创建指定目录。重名时给出错信息。 删除目录:删除指定目录下所有文件和子目录。要删目录不空时,要给出提示是否要删除。 创建文件:创建指定名字的文件,只要创建表示文件的节点即可,内容及大小不考虑。 删除文件:删除指定文件,不存在时给出出错信息。 退出文件系统:exit 4、总体流程: 初始化文件目录; 输出提示符,等待接受命令,分析键入的命令; 对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。 四.概要设计 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。 2.文件存储空间的分配采用显式链接分配。为了实现创建和删除文件必须要有一棵初始的文件树存在,以便在文件树的根节点下实现创建和删除文件。 3. 数据结构与树结构。数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树中每个分叉点称为结点,起始结点称为树根,任意两个结点间的连接关系称为树枝,结点下面不再有分枝称为树叶。结点的前趋结点称为该结点的"双亲",结点的后趋结点称为该结点的"孩子",同一结点的"孩子"之间互称"兄弟"。 4.文件目录结构采用多级目录结构。为了简单起见,可以使用文件结构体,结构体内容包括:文件名,文件目录识别标示,文件链接数,以及他的左孩子右孩子左兄弟右兄弟指 5. 要有分解函数对输入的命令进行分解。以识别那部分是哪部分是命令,哪部分是路径和文件名。 6. 最后要有执行函数。来执行输入的创建文件命令。 五.代码及流程 开始 初始化文件树 获取键盘输入 分解命令 执行命令 显示目录 退出 改变目录 删除目录文件 创建目录/文件 图5-1 主函数流程图 2)edit()创建文件函数流程图 图5-2 创建文件函数流程图 开始 检查命令格式 获取文件名 不存在该文件 删除的是目录 由用户共享该文件 报错提示 处理删除的是第一个孩子情况 处理删除的不是第一个孩子情况 结束 图5-3 删除函数流程图 4)ParseCommand()分解命令函数流程图 图5-4 分解命令函数流程图 5)改变目录函数rdComd() 图 5-5 改变目录函数流程图 源代码: #include <stdio.h> #include <iostream> #include <string.h> #include <ctype.h> #include <stdlib.h> #define FILENAME_LEN 21 #define INPUT_LEN 81 #define COMMAND_LEN 11 using namespace std; void Init();//初始化文件树 int ParseCommand();//接受输入的命令并把其分解成操作名和路径文件名 void ExecuteCommand();//执行命令 int cdComd();//处理cd命令 int editComd();//处理edit命令 int delComd();//处理del命令 int dirComd();//处理dir命令 int mdComd();//处理md命令 int rdComd();//处理rd命令 int FindPath(char *ph);//寻找参数ph所指向的路径 int FindFilename(char Para2[]);//从参数Para2中找到要建立或删除的文件、目录名,并把指针只想其父亲结点 struct FileNode* CreateFileNode(char filename[],int isdir,int i_nlink);//创建结点 int GetInput(char* buffer,unsigned int buffer_len);//获取输入 int CheckCommand();//命令检查 int GetDir(int begin,char *path,char *curDir);//获取路径 struct FileNode *cp, *tp, *root; char path[INPUT_LEN-COMMAND_LEN];//记录当前走过的路径 char Para1[COMMAND_LEN],Para2[INPUT_LEN-COMMAND_LEN]; char curpath[INPUT_LEN-COMMAND_LEN],tmppath[INPUT_LEN-COMMAND_LEN]; char filename[FILENAME_LEN],tmp; unsigned int i,j;//int i,j; struct FileNode //结点结构 { char filename[FILENAME_LEN];//文件名/目录名 int isdir;//目录文件识别标志 int i_nlink;//文件的链接数 struct FileNode *parent, *child;//指向父亲的指针和指向左孩子的指针 struct FileNode *sibling_prev, *sibling_next;//指向前一个兄弟的指针和指向后一个兄弟的指针. }; //创建结点 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->sibling_prev=NULL; node->sibling_next=NULL; return node; } //初始化文件树 void Init() { struct FileNode *binNode,*usrNode, *unixNode,*etcNode,*libNode,*userNode, *binNode2,*liuNode,*sunNode,*ftiNode; strcpy(path,"/"); //根目录写入当前路径 //创建文件树的结点 binNode=CreateFileNode("bin",1,0); usrNode=CreateFileNode("usr",1,0); unixNode=CreateFileNode("unix",0,0); etcNode=CreateFileNode("etc",1,0); libNode=CreateFileNode("lib",1,0); userNode=CreateFileNode("user",1,0); binNode2=CreateFileNode("bin",1,0); liuNode=CreateFileNode("liu",1,0); sunNode=CreateFileNode("sun",1,0); ftiNode=CreateFileNode("fti",1,0); cp=tp=root=CreateFileNode("/",1,0); //结点相应内容赋值 root->parent=NULL; root->child=binNode; root->sibling_prev=root->sibling_next=NULL; binNode->parent=root; binNode->child=NULL; binNode->sibling_prev=NULL; binNode->sibling_next=usrNode; usrNode->parent=NULL; usrNode->child=libNode; usrNode->sibling_prev=binNode; usrNode->sibling_next=unixNode; unixNode->parent=NULL; unixNode->child=NULL; unixNode->sibling_prev=usrNode; unixNode->sibling_next=etcNode; etcNode->parent=NULL; etcNode->child=NULL; etcNode->sibling_prev=unixNode; etcNode->sibling_next=NULL; libNode->parent=usrNode; libNode->child=liuNode; libNode->sibling_prev=NULL; libNode->sibling_next=userNode; userNode->parent=NULL; userNode->child=NULL; userNode->sibling_prev=libNode; userNode->sibling_next=binNode2; binNode2->parent=NULL; binNode2->child=NULL; binNode2->sibling_prev=userNode; binNode2->sibling_next=NULL; liuNode->parent=libNode; liuNode->child=NULL; liuNode->sibling_prev=NULL; liuNode->sibling_next=sunNode; sunNode->parent=NULL; sunNode->child=NULL; sunNode->sibling_prev=liuNode; sunNode->sibling_next=ftiNode; ftiNode->parent=NULL; ftiNode->child=NULL; ftiNode->sibling_prev=sunNode; ftiNode->sibling_next=NULL; } //获取文件或目录名,并把指针指向其父亲结点 int FindFilename(char Para2[]) { i=strlen(Para2)-1; j=0; while(Para2[i]!='/'&& i>=0) { filename[j]=Para2[i]; i--; j++; } filename[j]='\0';//获得逆序的文件或目录名,存入filename中 if(i<0) Para2[i+1]='\0'; else Para2[i]='\0'; j--; for(i=0;i<strlen(filename)/2;i++,j--) { //filename逆转,获得正确的文件或目录名 tmp=filename[i]; filename[i]=filename[j]; filename[j]=tmp; } if(strlen(Para2)>0) { //查找路径 int sign=FindPath(Para2); if(sign==0) return 0; } return 1; } //缓冲区安全输入子函数 //如果输入超过buffer_len,则截取前buffer_len-1长度的输入, //buffer_len处字符用'/0'代替 int GetInput(char* buffer,unsigned int buffer_len) { unsigned int count=0; while(count<buffer_len) { if((buffer[count]=getchar())==10) { buffer[count]='\0'; return count; } count++; } while(getchar()!=10); buffer[buffer_len-1]='\0'; return -1; } //改变目录函数 int cdComd() { if(!CheckCommand()) //命令检查 return 0; if(strcmp(Para2,"..")==0) { //对cd..命令的处理 int i; while(cp->sibling_prev) cp=cp->sibling_prev; if(cp->parent) { cp=cp->parent; } //找到父亲结点 else { return 0; } //对当前路径进行相应处理 i=strlen(path); while(path[i]!='/'&&i>0) i--; if(i!=0) path[i]='\0'; else path[i+1]='\0'; } else { FindPath(Para2);//查找路径 } return 1; } //创建目录函数 int mdComd() { struct FileNode * temp,*tp; temp=CreateFileNode("",1,0); int sign; if(strlen(Para2)==0) { //参数不能为空 printf("\n命令格式有错误.\n"); return 0; } if(strlen(Para2)>20) { //长度检查 printf("\n目录名过长\n"); return 0; } //格式检查 if (!(isalpha(Para2[0])||Para2[0]=='_'||Para2[0]=='\0'||Para2[0]=='/')) { printf("目录名格式有错!\n");/* 目录首字母可以为'字母'或'数字'或'/'*/ return 0; } sign=FindFilename(Para2); //获取目录名 if(sign==0) return 0; if(cp->isdir!=1) { //如当前指针指向的是文件,则报错 printf("you cannot edit a directory in under a file!\n"); return 0; } tp=CreateFileNode(filename,1,0); //创建目录结点,并插入到指定目录下 if(cp->child==NULL) { tp->parent=cp; tp->child=NULL; cp->child=tp; tp->sibling_prev=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==1) { 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 rdComd() { int sign; struct FileNode *temp; char cmd[2]; if(!CheckCommand()) //命令检查 return 0; sign=FindFilename(Para2); //获取目录名 if(sign==0) return 0; if(cp->child) { //用temp指向要删除的结点 temp=cp->child; while(temp->sibling_next && (strcmp(temp->filename,filename)!=0 || temp->isdir!=1)) temp=temp->sibling_next; if(strcmp(temp->filename,filename)!=0) { printf("不存在该目录!\n"); return 0; } } else { printf("不存在该目录!\n"); return 0; } if(temp->isdir!=1) { //要删除的不能是文件 printf("ERROR!该命令只能删除目录,不可删除文件!\n"); return 0; } if(temp->child) { //如仍有用户使用该目录,则不能删除 printf("\n该目录不为空,您确定要删除吗?Y/N!\n"); GetInput(cmd,2); if(strcmp(cmd,"n")==0||strcmp(cmd,"N")==0) return 0; } //删除工作 if(temp->parent==NULL) { //不是第一个孩子 temp->sibling_prev->sibling_next=temp->sibling_next; if(temp->sibling_next)//处理是最后一个兄弟的情况 temp->sibling_next->sibling_prev=temp->sibling_prev; temp->sibling_prev=temp->sibling_next=NULL; }//if else { //第一个孩子 if(temp->sibling_next)//处理是最后一个兄弟的情况 temp->sibling_next->parent=temp->parent; temp->parent->child=temp->sibling_next; } free(temp); return 1; } //显示目录子函数 int dirComd() { if(strlen(Para2)>0) { int sign=FindPath(Para2); //查找路径 if(sign==0) { return 0; } else { printf("\n%s>", path); } } if(cp!=root) printf(" <DIR> %s\n",".."); if(cp->child==NULL) //指定目录为空 { return 0; } tp=cp; tp=tp->child; //指定目录不为空,显示其所有子目录及文件名 while(tp) { if(tp->isdir) printf(" <DIR> %s\n",tp->filename); else printf(" <FILE> %s\n",tp->filename); tp=tp->sibling_next; } return 0; } //创建文件函数 int editComd() { struct FileNode * temp=CreateFileNode("",0,0); int sign; struct FileNode *tp; if(strlen(Para2)==0) { //路径不能为空 printf("\n命令格式有错误.\n"); return 0; } if(strlen(Para2)>20) { //长度检查 printf("\n文件名过长\n"); return 0; } //格式检查 if (!(isalpha(Para2[0])||Para2[0]=='_'||Para2[0]=='\0'||Para2[0]=='/')) { printf("文件名格式有错!\n");/* 文件首字母可以为'字母'或'数字'或'_'或'/'或'回车'*/ return 0; } sign=FindFilename(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_prev=NULL; tp->sibling_next=NULL; } else { temp=cp; temp=temp->child;//用temp找到新结点插入处 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 delComd() { int sign; struct FileNode *temp; if(strlen(Para2)==0) { //参数不能为空 printf("\n命令格式有错误.\n"); return 0; } sign=FindFilename(Para2); //获取文件名 if(sign==0) return 0; if(cp->child) { //用temp指向要删除的结点 temp=cp->child; while(temp->sibling_next&&(strcmp(temp->filename,filename)!=0||temp->isdir!=0)) temp=temp->sibling_next; if(strcmp(temp->filename,filename)!=0) { printf("不存在该文件!\n"); return 0; } } else { printf("不存在该文件!\n"); return 0; } if(temp->isdir!=0) { //要删除的不能是目录 printf("ERROR!该命令只能删除文件,不可删除目录!\n"); return 0; } if(temp->i_nlink!=0) { //如仍有用户使用该文件,则不能删除 printf("还有用户共享了该文件,不能删除!\n"); return 0; } //删除工作 if(temp->parent==NULL) { //不是第一个孩子 temp->sibling_prev->sibling_next=temp->sibling_next; if(temp->sibling_next)//处理是最后一个兄弟的情况 temp->sibling_next->sibling_prev=temp->sibling_prev; temp->sibling_pre- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 报告 文件 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文