《模拟Linux文件系统》.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计五: 设计任务: 模拟Linux文件系统。在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的 模拟Linux文件系统 。 在现有机器硬盘上开辟20M的硬盘空间,作为设定的硬盘空间。 编写一管理程序对此空间进行管理,以模拟Linux文件系统,具体要求如下: 要求盘块大小1k正规文件 (2) i 结点文件类型 目录文件(共1byte)块设备管道文件。物理地址(索引表)共有13个表项,每表项2byte。文件长度4byte。联结计数1byte(3)0号块 超级块 栈长度50空闲盘块的管理:成组链接 ( UNIX)位示图法 (Linux)(4)每建一个目录,分配4个物理块文件名 14byte(5)目录项信息i 结点号 2byte (6)结构: 0#: 超级块1#-20#号为 i 结点区20#-30#号为根目录区 该管理程序的功能要求如下: 能够显示整个系统信息,源文件可以进行读写保护。目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。 改变目录:改变当前工作目录,目录不存在时给出出错信息。 显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。 创建目录:在指定路径或当前路径下创建指定目录。重名时给出错信息。 删除目录:删除指定目录下所有文件和子目录。要删目录不空时,要给出提示是否要删除。 建立文件(需给出文件名,文件长度)。 打开文件(显示文件所占的盘块)。 删除文件:删除指定文件,不存在时给出出错信息。 程序的总体流程为: 初始化文件目录; 输出提示符,等待接受命令,分析键入的命令; 对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。 一 程序清单 头文件 block.h, command.h, disk.h, fd.h, inode.h, shell.h c文件 block.c, command.c, disk.c, fd.c, inode.c, shell.c 具体程序清单见源代码,在此不一一列出。 二 概要设计 2.1 文件系统组织结构 super inodes Data blocks 1024B 30*1024B 磁盘块以组的形式链接起来 (1)第一个磁盘块:写入超级块 (2)从第二个磁盘块开始:用30个磁盘块记inodes (3)剩下的磁盘块作为数据块Data blocks Data blocks是由多个磁盘块组构成,每个栈的开始磁盘块用于记录空闲块栈,因为本实验是采用UNIX的空闲盘块管理方法,即成组链接法。每一组用一个栈表示,里面存放空闲块的磁盘块号。剩下的磁盘块都作为文件的数据块,记录文件或目录的内容。 2.2 系统流程图 2.2.1 系统框架------------------main() 2.2.2 格式化文件系统流程------------------int fs_format(FILE *fp) 2.2.3 shell运行流程------------------------------------void shell( FILE *fp, int *pd_ind_no)2.2.4 相关功能实现流程 (1)创建目录 int create_fd( FILE *fp, int dir_ind_no, const char *file, const char given_type, const char *f_size) 这里given_type ==”d”表示目录,f_size默认为0.(2)创建文件 int create_fd( FILE *fp, int dir_ind_no, const char *file, const char given_type, const char *f_size) 这里given_type ==”f”表示目录,f_size默认为0,也可以是用户输入的创建文件大小 (3)显示目录内容-------------------- void list_dir( FILE *fp, int dir_ind_no)(4) 改变目录--------------------int cd_path( FILE *fp, int *pd_ind_no, char *given_path)(5)显示状态----------------------------------------void status( FILE *fp) (6)删除文件/目录------------------------int remove_fd(

文档评论(0)

guadihaoying + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档