您好,欢迎访问三七文档
北京联合大学信息学院《计算机操作系统》实训报告实验序号:003姓名:学号:班级:专业:一:实验题目:模拟文件管理二:设计思想:文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。实现功能:login用户登录dir列目录modify修改文件属性create创建文件delete删除文件open打开文件close关闭文件read读文件write写文件cd更改目录三:数据结构typedefstruct/*定义文件*/{intfpaddr;/*文件地址*/intflength;/*文件长度*/intfmode;/*文件属性:0-ReadOnly;1-WriteOnly;2-ReadandWrite;3-Protect;*/charfname[MAXNAME];/*文件名*/}OSFILE;typedefstruct/*thestructureofOSUFD定义用户文件目录*/{charufdname[MAXNAME];/*ufdname*/OSFILEufdfile[MAXCHILD];/*ufdownfile*/}OSUFD;typedefstruct/*thestructureofOSUFD'LOGIN定义登陆*/{charufdname[MAXNAME];/*ufdname*/charufdpword[8];/*ufdpassword*/}OSUFD_LOGIN;typedefstruct/*fileopenmode定义操作方式*/{intifopen;/*ifopen:0-close,1-open*/intopenmode;/*0-readonly,1-writeonly,2-readandwrite,3-protect*/}OSUFD_OPENMODE;四:定义函数voidLoginF();/*登录文件系统*/voidDirF();/*显示系统目录*/voidCreateF();/*创建文件*/voidDeleteF();/*删除文件*/voidModifyFM();/*修改文件属性*/voidOpenF();/*打开文件*/voidCloseF();/*关闭文件*/voidReadF();/*读文件*/voidWriteF();/*写文件*/voidQuitF();/*退出*/voidCdF();/*更改目录名称*/voidhelp();登录函数voidLoginF()/*LOGINFileSystem登陆函数*/{charloginame[MAXNAME],loginpw[9],logincpw[9],str[50];//loginpw-输入密码,logincpw-确认输入密码,str[50]存放地址inti,j,flag=1;chara[25];intfindout;/*loginusernotexist*/while(1){findout=0;printf(\n\nLoginName:);gets(loginame);//把用户名写入系统ltrim(rtrim(loginame));fp_mfd=fopen(d:\\osfile\\mfd.txt,rb);//打开文件mfdfor(i=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;i++)if(strcmp(strupr(ufd_lp.ufdname),strupr(loginame))==0)//两者相等{findout=1;strcpy(logincpw,ufd_lp.ufdpword);}fclose(fp_mfd);//关闭mfd文件if(findout==1)/*userexist该用户存在*/{printf(LoginPassword:);/*用户密码输入*/InputPW(loginpw);/*inputpassword,use'*'replace*/if(strcmp(loginpw,logincpw)==0)//相等{strcpy(username,strupr(loginame));strcpy(dirname,username);fp_mfd=fopen(d:\\osfile\\mfd.txt,rb);for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++)//记录用户名{strcpy(str,d:\\osfile\\);strcat(str,ufd_lp.ufdname);/*strcat(dest,char)添加char到dest结尾处*/strcat(str,.txt);ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));//malloc向系统申请分配指定size个字节的内存空间分配二级文件空间strcpy(ufd[j]-ufdname,strupr(ufd_lp.ufdname));fp_ufd=fopen(str,rb);fcount[j]=0;//当前用户文件数目for(i=0;fread(&ufd[j]-ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++)//记录用户文件{ifopen[j][i].ifopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf(\n\nLoginsuccessful!WelcometothisFileSystem\n\n);loginsuc=1;return;}else//不相等{printf(\n\n);flag=1;while(flag){printf(LoginFailed!PasswordError.TryAgain(Y/N):);gets(a);ltrim(rtrim(a));if(strcmp(strupr(a),Y)==0){loginsuc=0;flag=0;}elseif(strcmp(strupr(a),N)==0){loginsuc=0;flag=0;return;}}}}else/*usernotexist*/{printf(NewPassword(=8):);InputPW(loginpw);/*inputnewpassword,use'*'replace*/printf(\nConfirmPassword(=8):);/*inputnewpassword,use'*'replace*/InputPW(logincpw);if(strcmp(loginpw,logincpw)==0)//相等{strcpy(ufd_lp.ufdname,strupr(loginame));//写入目录strcpy(ufd_lp.ufdpword,loginpw);fp_mfd=fopen(d:\\osfile\\mfd.txt,ab);fwrite(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd);//写入文件fclose(fp_mfd);strcpy(username,strupr(loginame));strcpy(dirname,loginame);strcpy(str,d:\\osfile\\);//写入地址strcat(str,username);strcat(str,.txt);if((fp_ufd=fopen(str,rb))==NULL){fp_ufd=fopen(str,wb);fclose(fp_ufd);}fp_mfd=fopen(d:\\osfile\\mfd.txt,rb);for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++){strcpy(str,d:\\osfile\\);strcat(str,ufd_lp.ufdname);strcat(str,.txt);ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));strcpy(ufd[j]-ufdname,strupr(ufd_lp.ufdname));fp_ufd=fopen(str,rb);for(i=0;fread(&ufd[j]-ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++)//记录用户文件{ifopen[j][i].ifopen=0;ifopen[j][i].openmode=4;}fclose(fp_ufd);}fclose(fp_mfd);ucount=j;SetPANo(0);printf(\n\nLoginSuccessful!WelcometothisSystem\n\n);loginsuc=1;return;}else//不相等{printf(\n\n);flag=1;while(flag){printf(LoginFailed!PasswordError.TryAgain(Y/N):);gets(a);ltrim(rtrim(a));if(strcmp(strupr(a),Y)==0){loginsuc=0;flag=0;}elseif(strcmp(strupr(a),N)==0){loginsuc=0;flag=0;return;}}}}}}显示系统目录voidDirF()/*DirFileSystem主目录*/{inti,j,count=0;charsfmode[25],sfpaddr[25],str[25];clrscr();if(strcmp(strupr(ltrim(rtrim(dirname))),)!=0)//不为空{printf(\n\nd:\\%sdir\n,dirname);printf(\n%14s%16s%14s%10s%18s\n,FileName,FileAddress,FileLength,Type,FileMode);j=ExistD(dirname);for(i=0;ifcount[j];i++){if((i%16==0)&&(i!=0))//限制长度{printf(\nPressanykeytocontinue..);getch();clrscr();printf(\n%14s%16s%14s%10s%18s\n,FileName,FileAddress,FileLength,Type,FileMode);}itoa(ufd[j]-ufdfile[i].fpaddr,str,10);//itoa()把整数转换为字符串strcpy(sfpaddr,file);strcat(sfpaddr,str);if(ufd[j]-ufdfile[i].fmode==0)strcpy(sfmode,ReadOnly);elseif(ufd[j]-ufdfile[i].fmode==1)strcpy(sfmode,WriteOnly);elseif(ufd[j]-ufdfile[i].fmode==2)strcpy(sfmode,ReadAndWrite);elsestrcpy(sfmode,Protect);printf(%14s%16s%14d%10s%18s\n,ufd[j]-ufdfile[i].fname,sfpaddr,ufd[j]-ufdfile[i].flength,FILE,sfmode);}printf(\n%3dfile(s)\n,fcount[j]);}else//空{printf(\n\nd:\\dir\n);printf(\n%14s%18s%8s\n,D
本文标题:操作系统实验2报告
链接地址:https://www.777doc.com/doc-3085739 .html