1、 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。提示: (1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建的文件,可以编号存储于磁盘上。如file0,file1,file2.并以编号作为物理地址,在目录中进行登记1.3 系统开发 运行环境 Windows XP 系统, Visual C+ 6.0二 系统分析设计 2.2
2、 基本原理本系统是模拟实现多用户多的文件系统,在系统出现登录后 ,输入用户与口令,在用户登录系统后,可以添加2个普通用户。普通用户的命令与系统管理员的系统命令具体实现是一样的。此模拟系统提供了10个命令,并根据命令的含义与要求,用C/C+编程来完成所有具体操作。该系统可以模拟完成用户的登陆和验证,新建文件,打开文件,读文件,写文件,关闭文件,删除文件,查看文件,退出系统,注销用户,切换用户等系统功能。2.3 数据结构设计 系统管理员typedef struct user /系统管理员 char name5 ; / 登录用户名 char password10 ; / 登录密码user;用户文件目
3、录struct UFD char fname5;/文件名 char proper2;/文件属性 ,R或RW int length;/记录长度 int addr;/文件地址 ;用户已打开文件表struct UOF char fname5; char proper2;/文件属性,r或rw int length; char state5; /状态: new, open int read; /读指针 int write; /写指针 主文件目录struct MFD char Username5;/用户名 struct UFD UserDirecL;/用户文件目录 struct UOF OpenUserS
4、;/已打开文件目录 int count; /每个用户拥有的存在的文件计数 MFDN;2.4 程序流程图 失败 重新登录成功 用户命令三 程序代码以及运行结果系统管理员登陆以及验证:bool login(char *name, char *pwd ) if( (strcmp(name, admin.name)=0) & (strcmp(pwd, admin.password)=0) return true; return false;创建新用户bool NewUser(char user) int i=0; while(strcmp(MFDi.Username,)!=0&(i=N) /如果用户数
5、已满 cout用户数已满. 你必须删除一个用户才继续新建用户endl; return 0; else /如果用户数未满,则建立新用户 strcpy(MFDi.Username,user); NOU+;/用户数加1 用户 user 创建成功 ./提示当前用户创建成功 系统现有的用户数 : NOU/显示系统现有的用户数 return 1; 注销用户void Logout(int a) /注销用户,清除所有文件的登记栏 string str; char temp5=; for(int i=0;iL;i+) /对 UFD中的文件名MFDa.UserDireci.fname进行处理 str=static
6、_cast(MFDa.UserDireci.fname); strcpy(MFDa.UserDireci.fname,str.substr(0,4).c_str(); for(int j=0;jS;j+) /如果UFD中的文件名与UOF中的文件名相同 /对UOF中的文件名UOFi.fname进行处理 (MFDa.OpenUserj.fname); strcpy(MFDa.OpenUserj.fname,str.substr(0,4).c_str(); /清除UOF中信息 if(strcmp(MFDa.UserDireci.fname,MFDa.OpenUserj.fname)=0) strcp
7、y(MFDa.OpenUserj.fname,); /清除UOF中文件名 strcpy(MFDa.OpenUserj.proper,/清除UOF中文件属性 MFDa.OpenUserj.length=0; /清除UOF中记录长度 strcpy(MFDa.OpenUserj.state, /清除UOF中文件状态 MFDa.OpenUserj.read=0; /清除UOF中读指针 MFDa.OpenUserj.write=0; /清除UOF中写指针 /清除UFD中信息 strcpy(MFDa.UserDireci.fname,/清除UFD中文件名 strcpy(MFDa.UserDireci.pr
8、oper,/清除UFD中文件属性 MFDa.UserDireci.length=0;/清除UFD中记录长度 MFDa.UserDireci.addr=0; /清除UFD中文件地址 strcpy(temp, MFDa.Username); strcpy(MFDa.Username,/清除MFD中的用户名 MFDa.count=0; /该用户下的文件数清零 NOU-;/用户数减1 tempfilename; if(strlen(filename)4) goto Re;/如果文件名长度不符合要求,则要求重新输入 loop:文件属性(r,rw) :/输入文件属性,读或是读写 property; str
9、cpy(temp,property);/将属性字符串 赋值给temp if(!(strcmp(temp,rw)=0|strcmp(temp,r)=0)/检查属性是否正确 cout=L)/如果用户文件目录UFD已满,则提示文件满的信息 cout 用户MFDa.Username 文件目录UFD已满. /当用户文件目录UFD未满时 else int j=0; int k=0; while(strcmp(MFDa.UserDirecj.fname,(jL) /*在UFD中寻找空登记栏,并登记*/ j+; MFDa.count+; /用户的文件计数器加1 strcpy(MFDa.UserDirecj.f
10、name,filename); /UFD中登记文件名 MFDa.UserDirecj.length=Record;/UFD记录长度 strcpy(MFDa.UserDirecj.proper,temp);/UFD中文件属性 srand(unsigned)time(NULL); /产生随机数 i=rand()%100;/ 找一磁盘空闲块并赋值给i MFDa.UserDirecj.addr=i;/在UFD登记栏中置文件地址为i /提示文件在UFD中建立成功 文件:filename 已经成功建立 n 文件数量:MFDa.count/显示建立成功 while(strcmp(MFDa.OpenUserk
11、.fname,(kS) /*在UOF中寻找空登记栏*/ k+; /如果用户已打开文件表UOF未满 if(kS) /在UOF中登记文件的相关信息 strcpy(MFDa.OpenUserk.fname,filename); /UOF中文件名 MFDa.OpenUserk.length=Record;/UOF中记录长度 strcpy(MFDa.OpenUserk.proper, temp);/UOF中文件属性 strcpy(MFDa.OpenUserk.state,new/修改状态为建立 MFDa.OpenUserk.write=i;/修改写指针为i /提示文件在UOF中建立成功 / cout 已
12、经成功打开 n /如果用户已打开文件表UOF已满,提示文件满的信息 else / 用户已打开文件表UOF已满. else /提示文件同名,不能建立 文件同名 不能建立打开文件写文件读文件删除文件系统帮助命令四 实习心得体会 这次操作系统实习为期三周的学习时间,虽然时间比较短,但是还是有点收获的。实习之前,是操作系统课程学习,学习的都是课本的理论知识。在没有接触操作系统课程之前,个人的见识真是少啊。 我以为操作系统就是 Windows XP 这么一种操作系统,还没想到操作系统竟然还有这么多的呢。课堂上讲的操作系统就是Linux 操作系统,可是课本的理论知识学习的比较模糊,很多概念都不理解。经过这
13、次操作系统实习之后,个人在虚拟机里 不断的练习 Linux系统各种命令。由于个人这次实习,所选的题目是:文件系统模拟设计,所以个人在这方面操作比较多,经常动手练习那些Linux系统常用的文件系统命令,逐渐熟悉理解了这个文件系统的各种命令。不过,对于Linux系统 还有很多知识是不懂的,如果将来打算从事Linux系统软件开发的哇,那么还是需要慢慢学习Linxu系统的。 通过这次实习,促使个人开始接触了解这个Linux系统,也对Linux系统有了一点兴趣。五 参考文献现代操作系统 (第2版)作者: (荷)Andrew S. Tanenbaum 作译者介绍 译者: 陈向群 马洪兵 出版社:机械工业出版社
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1