1、 read 读文件 write 写文件 cd 进出目录2列目录时要列出文件名,物理地址,保护码和文件长度3源文件可以进行读写保护【实验环境】C+DevCpp【设计思路】本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2并以编号作为物理地址,在目录中进行登记。结构体:typedef struc
2、t /*the structure 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*/
3、 OSFILE ufdfileMAXCHILD; /*ufd own file*/OSUFD; /用户下面的文件 typedef struct /*the structure of OSUFDLOGIN*/ 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-initial*/OSUFD_OPEN
4、MODE;主要的函数说明: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 File关闭文件*/void ReadF(
5、); /*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 FindPANo() /*find out phy
6、sical 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 WriteF1() /*write file相当于置换文件*/程
7、序流程说明:整体流程:结束各部分功能流程:Open: N N YDelete:YNY Write: Y N1Close:【源程序清单】void OpenF() /*Open File*/ printf(nnC:%s,strupr(dirname); /显示当前路径 int fcoun, i; /定义两个整形变量 char fnameMAXNAME, fmode25; /定义两个字符串变量 int fmod; /文件模式nPlease input FileName:); gets(fname); /接收打开文件的文件名 ltrim(rtrim(fname); /去除左右空白 if(ExistF(
8、fname)0) /判断文件是否存在 /不存在nError.文件名 %s不存在n, fname); wgetchar=1; else /存在 i=ExistD(username); /获取用户物理信息 for(int a=0; a ufdfilea.fname)=0) /找到文件 fcoun=a; break; ifopenifcoun.ifopen=1; /将文件状态置为打开状态Please input OpenMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect): /打开文件模式 gets(fmode); /获取模式 fm
9、od=atoi(fmode); /将字符串转换为整型 ifopenifcoun.openmode=fmod; /将文件的模式置为OpenModenOpen Successedvoid DeleteF() /*Delete File*/ /显示路径 char fnameMAXNAME, str50, str150; /定义三个字符串变量 int i, k, j; int fpaddrno1; /记录文件物理地址块号 if(strcmp(strupr(ltrim(rtrim(dirname), )=0) /判断主目录是否为空 nError.请确认您要删除的是否在用户目录下!n if(strcmp(
10、strupr(dirname), strupr(username)!=0) /判断用户是否在用户目录下 nError.您只能删除修改自己用户目录下的文件哦! else /接收删除的文件名 /去除文件名的左右空白 i=ExistF(fname); /用户文件位置 if(i=0) k=ExistD(username); /获取用户所在存储位置 if(ifopenki.ifopen=1) /文件状态处于打开状态,不许删除n Error. 处于打开状态!请先关闭哟! if(ufdk-ufdfilei.fmode=3) /保护文件,不可删除nError.处于被保护状态! fpaddrno1=ufdk-ufdfilei.fpaddr; /获取文件的物理地址块号 fpaddrnofpaddrno1=0; /回收物理地址块号 for(j=i; jufdfilej=ufdk-ufdfilej+1; /将j+1位置为j strcpy(str , c:osfilefile itoa(fpaddrno1, str1, 10); /将整数转化为字符串 strcat(str, str1); strcat(str, .txt /连接 remove(str); /删除物理文件 fcountk-; /文件个数减一nis deleted successfully.n wgetchar=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1