ImageVerifierCode 换一换
格式:DOC , 页数:14 ,大小:123KB ,
资源ID:2889210      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2889210.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(文件系统实验报告.doc)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

文件系统实验报告.doc

1、实验二 文件系统实验报告 一 实验简介本实验要求在假设的I/O 系统之上开发一个简单的文件系统,这样做既能让实验者对文件系统有整体了解,又避免了涉及过多细节。用户通过create, open, read 等命令与文件系统交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0 至L-1。I/O 系统利用内存中的数组模拟磁盘。实际物理磁盘的结构是多维的:有柱面、磁道、扇区等概念。I/O 系统的任务是隐藏磁盘的结构细节,把磁盘以逻辑块的面目呈现给文件系统。逻辑块顺序编号,编号取值范围为0 至L . 1,其中L 表示磁盘的存储块总数。实验中,我们可以利用字符数组ldiskLB 构建磁盘模型,其

2、中B 表示每个存储块的长度。I/O 系统从文件系统接收命令,根据命令指定的逻辑块号把磁盘块的内容读入命令指定的内存区域,或者把命令指定的内存区域内容写入磁盘块。我设计的文件系统拥有三个用户。二具体说明1.文件系统的组织:磁盘的前k 个块是保留区,其中包含如下信息:位图和文件描述符。位图用来描述磁盘块的分配情况。位图中的每一位对应一个逻辑块。创建或者删除文件,以及文件的长度发生变化时,文件系统都需要进行位图操作。前k 个块的剩余部分包含一组文件描述符。每个文件描述符包含如下信息: 文件长度,单位字节 文件分配到的磁盘块号数组。该数组的长度是一个系统参数。在实验中我们可以把它设置为一个比较小的数,

3、例如3。2目录:我们的文件系统中仅设置一个目录,该目录包含文件系统中的所有文件。除了不需要显示地创建和删除之外,目录在很多方面和普通文件相像。目录对应0 号文件描述符。初始状态下,目录中没有文件,所有,目录对应的描述符中记录的长度应为0,而且也没有分配磁盘块。每创建一个文件,目录文件的长度便增加一分。目录文件的内容由一系列的目录项组成,其中每个目录项由如下内容组成: 文件名 文件描述符序号3.对文件的操作:文件系统需提供如下函数;create, destroy, open, read, write。 create(filename): 根据指定的文件名创建新文件。 destroy(filena

4、me): 删除指定文件。 open(filename): 打开文件。该函数返回的索引号可用于后续的read, write, lseek, 或close 操作。 close(index): 关闭制定文件。 read(index, mem_area, count): 从指定文件顺序读入count 个字节mem_area 指定的内存位置。读操作从文件的读写指针指示的位置开始。 write(index, mem_area, count): 把mem_area 指定的内存位置开始的count 个字节顺序写入指定文件。写操作从文件的读写指针指示的位置开始。 lseek(index, pos): 把文件的读

5、写指针移动到pos 指定的位置。pos是一个整数,表示从文件开始位置的偏移量。文件打开时,读写指针自动设置为0。每次读写操作之后,它指向最后被访问的字节的下一个位置。lseek 能够在不进行读写操作的情况下改变读写指针能位置。 directory: 列表显示所有文件及其长度。三实验过程创建文件create:此时显示文件中的文件:文件的删除delete:打开文件(open):文件的写操作(write):读文件(read):关闭文件(close):退出系统(exit):四实验代码#include #include #include #include #define NULL 0typedef st

6、ruct mdf/MDF结构体char username20;/用户名char filename20;/文件名struct mdf *next;MDF;typedef struct ufd/UFD结构体char filename20;/文件名int protect;/文件保护码unsigned int length;/文件长度struct ufd *next;UFD;typedef struct afd/AFD结构体 char filename20;/文件名int protect;/文件保护码unsigned int point;/文件读写指针struct afd *next;AFD;MDF

7、*pmdf;/全局链表头指针UFD *pufd;AFD *pafd;char UserUFD20;/已经登陆成功的用户名void initMDF()/初始化MDF表FILE *fp;pmdf= (MDF*)malloc(sizeof(MDF);MDF *p = pmdf;if(fp = fopen(MDF, r+) = NULL)/打开MDF文件puts(the MDF cannot open!n);exit(1);while (!feof(fp)/把MDF文件中的内容装入链表p-next = (MDF*)malloc(sizeof(MDF);p = p-next;fscanf(fp, %s,

8、 p-username);fscanf(fp, %s, p-filename);p-next = NULL;fclose(fp);void printUFD()/打印MDF表UFD *p = pufd-next;puts(文件名tt保护码tt文件长度n);while (p)printf(%s, p-filename);printf(tt%d , p-protect);printf(tt%dn, p-length);p=p-next;void initUFD(char *name)/初始化UFD表FILE *fp;pufd= (UFD*)malloc(sizeof(UFD);UFD *p = p

9、ufd;if(fp = fopen(name, r+) = NULL)puts(the UFD cannot open!n);exit(1);while (!feof(fp)/建立UFD链表p-next = (UFD*)malloc(sizeof(UFD);p = p-next;fscanf(fp, %s, p-filename);fscanf(fp, %d, &p-protect);fscanf(fp, %d, &p-length);fgetc(fp);p-next = NULL;fclose(fp);int checkuser()/检测登陆的用户名char username20;while

10、(1)puts(请输入用户名: n);scanf(%s, username);MDF *p = pmdf;while(p)if(strcmp(username, p-username) = 0)strcpy(UserUFD, p-filename);initUFD(p-filename);printUFD();return 1;p= p-next;puts(同户名不存在n);void initAFD()/初始化AFDpafd = (AFD*)malloc(sizeof(AFD);pafd-next = NULL;bool create()/创建文件命令char filename20;UFD *

11、p = pufd-next;AFD *pa = pafd;puts(请输入要创建的文件名: n);scanf(%s, filename);while (p)if(strcmp(filename, p-filename) = 0)puts(此文件已经存在了!n);return 0;if(!p-next)break;p= p-next;p-next = (UFD*)malloc(sizeof(UFD);p=p-next;strcpy(p-filename, filename);p-protect = 2;p-length = 0;p-next = NULL;while(pa-next)/创建文件后

12、加入到AFDpa=pa-next;pa-next = (AFD*)malloc(sizeof(AFD);pa = pa-next;strcpy(pa-filename ,filename);pa-protect = 2;pa-point = 0;pa-next = NULL;return 1;bool _delete()/删除文件命令char filename20;puts(请输入要删除的文件名: n);scanf(%s, filename);UFD *p = pufd;UFD *temp;while (p-next)if(strcmp(filename, p-next-filename) =

13、 0)temp = p-next;p-next = p-next-next;free(temp);printf(文件%s删除成功!n, filename);return 1;p= p-next;puts(要删除的文件不存在!n);return 0;bool open()/打开文件命令char filename20;unsigned int protect;puts(请输入要打开的文件名: n);scanf(%s, filename);puts(请输入要打开的文件保护类型: n);scanf(%d, &protect);UFD *p = pufd-next;AFD *pa = pafd-next

14、;while (pa)if(strcmp(filename, pa-filename) = 0)printf(文件%s已经打开!n,filename);return 1;if(!pa-next)break;pa = pa-next;if(!pa)pa=pafd;while (p)if(strcmp(filename, p-filename) = 0)pa-next = (AFD*)malloc(sizeof(AFD);pa = pa-next;strcpy(pa-filename , p-filename);pa-protect = protect;if(protect = 1)pa-poin

15、t = 0;elsepa-point = p-length;pa-next=NULL;printf(文件%s已经打开!n,filename);return 1;p= p-next;puts(要打开的文件不存在!n);return 0;void close()/关闭文件命令char filename20;UFD *pu = pufd-next;puts(请输入要关闭的文件名: n);scanf(%s, filename);AFD *p = pafd;AFD *temp;while (p&p-next)if(strcmp(filename, p-next-filename) = 0)temp =

16、p-next;p-next = p-next-next;if(temp-protect = 2)while(pu)if(strcmp(temp-filename, pu-filename) = 0)pu-length =temp-point;break;pu = pu-next;free(temp);printf(文件%s关闭成功!n, filename);return ;p= p-next;puts(要关闭的文件没有被打开!n);int read()/读文件命令char filename20;unsigned int length;AFD *p = pafd-next;puts(请输入要读的

17、文件名: n);scanf(%s, filename);puts(请输入要读的长度n);scanf(%d, &length);while (p)if(strcmp(filename, p-filename) = 0)p-point += length;printf(文件%s读取成功!n, filename);return 1;p= p-next;puts(读取失败文件没有打开过!n);return 0;int write()/写文件命令char filename20;unsigned int length;AFD *p = pafd-next;puts(请输入要写的文件名: n);scanf(

18、%s, filename);while (p)if(strcmp(filename, p-filename) = 0)if(p-protect != 2)printf(文件%s不可写!n, filename);return 0;puts(请输入要写的长度n);scanf(%d, &length);p-point += length;printf(文件%s写入成功!n, filename);return 1;p= p-next;puts(写入失败文件没有打开过!n);return 0;void destroy()/释放内存MDF *pm = pmdf;while(pm)pmdf = pmdf-n

19、ext;free(pm);pm = pmdf;AFD *pa = pafd;while(pa)pafd = pafd-next;free(pa);pa = pafd;UFD *pu = pufd;while(pu)pufd = pufd -next;free(pu);pu = pufd;void saveUFD()/保存UFD文件FILE *fp;UFD *p = pufd-next;if(fp = fopen(UserUFD, w) = NULL)puts(the UFD cannot open!n);exit(1);while (p)fprintf(fp, %s, n);fprintf(f

20、p, %s%s, p-filename,tt);fprintf(fp, %d%s, p-protect,tt);fprintf(fp, %d, p-length);p=p-next;fclose(fp);void exit()/推出系统AFD *pa = pafd-next;UFD *pu = pufd-next;while(pa)if(pa-protect = 2)while(pu)if(strcmp(pa-filename, pu-filename) = 0)pu-length = pa-point;break;pu = pu-next;pa =pa-next;saveUFD();prin

21、tUFD();destroy();void operate()/命令识别while(1)char command20;char name8 = create, delete, open, close,read, write,exit;puts(请输入命令: n);scanf(%s, command);if(strcmp(command, name0 ) = 0)create();else if(strcmp(command, name1 ) = 0)_delete();else if(strcmp(command, name2 ) = 0)open();else if(strcmp(comma

22、nd, name3 ) = 0)close();else if(strcmp(command, name4 ) = 0)read();else if(strcmp(command, name5 ) = 0)write();else if(strcmp(command, name6 ) = 0)exit();return;elseputs(无效命令,请重新输入:n);void print()puts(文件系统n);puts(*使用说明*:n);puts(本文件系统共有三个用户分别是user1 user2 user3n 系统命令有create, delete, open, close,read, write,exit nexit-退出系统);int main()print();initMDF();checkuser();initAFD();operate();/命令识别return 0;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2