2022年操作系统实验三__文件管理 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年操作系统实验三__文件管理 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验三__文件管理 .pdf(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 计算机操作系统课程实验报告题目文件管理学院 : 计算机学院专业 : 计算机科学与技术姓名班级学号2016年 12月 22 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 35 页 - - - - - - - - - 2 实验三 文件管理1. 实验目的:编写一个简单的二级文件系统实现程序,加深对文件系统的内部功能和内部实现的理解。要求模拟采用二级目录结构的磁盘文件系统的文件操作能实现相应的命令,用输入命令来模拟用户程序中调用的文件操作。2. 实验内容:最基本的文件操作
2、(1)创建文件在创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录中, 为之建立一个目录项。 目录项中应该记录新文件的文件名及其在外存的地址等属性。(2)删除文件当已不再需要某文件时,可将它从文件系统中删除。在删除时,系统应该先从目录中找到要删除的文件的目录项,使之成为空项, 然后回收该文件所占用的存储空间。(3)读文件在读一个文件时, 须在相应的系统调用中给出文件名和应该读入的内存目标地址。此时,系统同样要查找目录,找到制定的目录项,从中得到被读文件在外存中的位置。在目录项中,还有一个指针用于对文件的读/ 写。(4)写文件在写一个文件时, 须在相应的系统调用中给出该文
3、件名及该文件在内存中的(源)地址。为此,也同样须先查找目录,找到指定文件的目录项,在利用目录中的写指针进行写操作。(5)截断文件如果一个文件的内容已经陈旧而需要全部更新文件的内容时,一种方法是将此文件删除, 再重新创建一个新文件。 但如果文件名及其属性均无改变时,则可采取另一种所谓的截断文件的方法,此即将原有文件的长度设置为0,或说放弃原有的文件内容。(6)设置文件的读 / 写位置名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 35 页 - - - - - - - - -
4、 3 前述的文件读 / 写操作,都只提供了对文件顺序存取的手段,即每次都是从文件的始端读或写。设置文件读 / 写位置的操作,用于设置文件读 / 写指针的位置,以便每次读 / 写文件时,不是从其始端而是从所设置的位置开始操作。也正因如此,才能改顺序存取为随机存取。3. 设计实现:1)流程图2)详细设计源代码#include #include #include #include #include #define MaxUser 100 /定义最多有100 个用户名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
5、 - - - - 第 3 页,共 35 页 - - - - - - - - - 4 #define MaxDisk 512*1024 /定义磁盘空间大小#define commandAmount /对文件操作的指令数/ 存储空间管理有关结构体和变量char diskMaxDisk;/ 模拟 512K的磁盘存储空间typedef struct distTable /磁盘块结构体 int maxlength; int start; int useFlag; distTable *next; diskNode; diskNode *diskHead; typedef struct fileTable
6、 /文件快结构体 char fileName10; int start; /文件在磁盘存储空间的起始地址int length; /文件内容长度int maxlength;/文件的最大长度char fileKind3;/文件的属性 - 读写方式struct tm *timeinfo; bool openFlag;/判断是否有进程打开了文件; int used = 0;/ 定义 MFD 目录中用已有的用户数/ 两级目录结构体typedef struct user_file_directory /用户文件目录文件 UFD fileTable *file; 名师资料总结 - - -精品资料欢迎下载 -
7、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 35 页 - - - - - - - - - 5 user_file_directory *next; UFD; typedef struct master_file_directory /主目录文件 char userName10; char password10; UFD *user; MFD; MFD userTableMaxUser; int userID = -1; /用户登录的 ID 号,值为 -1 时表示没有用户登录/ 文件管理void fileCrea
8、te(); /创建文件void fileDelet(); /删除文件void fileWrite(); /写文件void fileRead();/读文件void fileRename(); /重命名文件void fileFind(); /查询文件void fileDir();/ 显示某一用户所有文件void fileClose(); /关闭已打开的文件void fileChange();/修改文件的读写方式int requestDist(int &stratPostion, int maxlength);/磁盘分配查询void initDisk();/初始化磁盘void freeDisk(in
9、t startPostion);/磁盘空间释放void diskShow();/显示磁盘使用情况void initFile(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 35 页 - - - - - - - - - 6 / 用户管理void userCreate(); int login(); void userDelet(); void userFind(); / 用户登陆主界面void webUser(); / 用户内部界面void webFile(); in
10、t main() initDisk(); initFile(); webUser(); return 0; void webUser() int i; while (1) printf(*n); printf(1.创建用户 2.登陆用户n); printf(3.删除用户 4.查看用户n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 35 页 - - - - - - - - - 7 printf(0.退出系统n); printf(*n); printf(请输入操作号
11、n); scanf(%d, &i); switch (i) case 0:exit(0); break; case 1:userCreate(); break; case 2:userID = login(); if (userID != -1) webFile(); break; case 3:userDelet(); break; case 4:userFind(); break; default: printf(您输入的命令有误,请重新选择n); system(pause); system(cls); break; void userCreate() 名师资料总结 - - -精品资料欢迎
12、下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 35 页 - - - - - - - - - 8 char c; char userName10; int i; if (usedMaxUser) printf(请输入用户名:); for (i = 0; c = _getch(); i+) if (c = 13) break; else userNamei = c; printf(%c, c); userNamei = 0; for (i = 0; iused; i+) if (!strcmp(userTab
13、lei.userName, userName) printf(n); printf(该用户名已存在, 创建用户失败 n); system(pause); system(cls); return; strcpy(userTableused.userName, userName); printf(n); printf(请输入密码: ); for (i = 0; c = _getch(); i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 35 页 - - - - - -
14、 - - - 9 if (c = 13) break; else userTableused.passwordi = c; printf(*); userTableuserID.passwordi = 0; printf(n); printf(创建用户成功 n); used+; system(pause); system(cls); else printf(创建用户失败,用户已达到上限n); system(pause); system(cls); fflush(stdin); int login() char name10, psw10; char c; int i, times; print
15、f(请输入用户名:); for (i = 0; c = _getch(); i+) if (c = 13) break; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 35 页 - - - - - - - - - 10 namei = c; printf(%c, c); namei = 0; for (i = 0; i used; i+) if (!strcmp(userTablei.userName, name) break; if (i = used) p
16、rintf(n 您输入的用户名不存在n); system(pause); system(cls); return -1; for (times = 0; times3; times+) memset(psw, 0, sizeof(psw); printf(n 请输入密码 :); for (i = 0; c = _getch(); i+) if (c = 13) break; else pswi = c; printf(*); printf(n); for (i = 0; iused; i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
17、- - - 名师精心整理 - - - - - - - 第 10 页,共 35 页 - - - - - - - - - 11 if (!strcmp(psw, userTablei.password) printf(用户登录成功 n); system(pause); system(cls); break; if (i = used) printf(您输入的密码错误,您还有%d 次输入机会 n, 2 - times); if (times = 2) exit(0); else break; fflush(stdin); return i; void userDelet() int statePos
18、; UFD *q; char name10, psw10; char c; int i, times, j; printf(请输入用户名:); for (i = 0; c = _getch(); i+) if (c = 13) break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 35 页 - - - - - - - - - 12 else namei = c; printf(%c, c); namei = 0; for (i = 0; i next; whil
19、e (q) if (q-file != NULL) statePos = q-file-start; freeDisk(statePos); q = q-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 35 页 - - - - - - - - - 13 for (i, j = i+1; i = used; j+, i+) userTablei = userTablej; printf(n 用户删除成功n); system(pause); system(cls
20、); used-; void userFind() int i; printf(用户列表: n); for (i = 0; i = 0; i-)/把字符串转换为十进制 length += (fileLengthi - 48)*j; j *= 10; for (i = k + 1, k = 0; commandi != &commandi != 0; i+, k+) fileKindk = commandi; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 35 页 -
21、- - - - - - - - 17 fileKindk = 0; UFD *fileNode, *p; for (p = userTableuserID.user-next; p != NULL; p = p-next) if (!strcmp(p-file-fileName, fileName) printf(文件重名,创建文件失败n); system(pause); return; if (requestDist(startPos, length) fileNode = (UFD*)malloc(sizeof(UFD); fileNode-file = (fileTable*)mallo
22、c(sizeof(fileTable); strcpy(fileNode-file-fileName, fileName); strcpy(fileNode-file-fileKind, fileKind); fileNode-file-maxlength = length; fileNode-file-start = startPos; fileNode-file-openFlag = false; time(&rawtime); fileNode-file-timeinfo = localtime(&rawtime); fileNode-next = NULL; if (userTable
23、userID.user-next = NULL) userTableuserID.user-next = fileNode; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 35 页 - - - - - - - - - 18 p = userTableuserID.user-next; while (p-next) p = p-next; p-next = fileNode; printf(创建文件成功 n); system(pause); else prin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统实验三_文件管理 2022 操作系统 实验 _ 文件 管理
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内