欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年+模拟UNIX文件系统的设计及实现 .pdf

    • 资源ID:38680683       资源大小:1.15MB        全文页数:36页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年+模拟UNIX文件系统的设计及实现 .pdf

    * 实践教学* 兰州理工大学计算机与通信学院2008 年秋季学期操作系统原理课程设计题目: 模拟 UNIX 文件系统专业班级:计算机一班姓名:张树伟学号:06240121 指导教师:刘嘉成绩:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 36 页 - - - - - - - - - 第 1 页总 36 页目录1.摘要. 2 2.问题描述 . 2 3.设计目的 . 2 4. 设计要求. 2 5. 详细设计. 3 5.1 界面设计 . 3 5.1 算法设计 . . 3 6. 设计总结 . 4 7. 参考文献. 4 8. 致谢. 5 9.附录 . 34 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 36 页 - - - - - - - - - 第 2 页总 36 页模拟 UNIX 文件系统的设计及实现1.课程设计内容多用户的多级目录的文件系统设计。2.概述UNIX 采用树型目录结构,每个目录表称为一个目录文件。一个目录文件是由目录项组成的。每个目录项包含16B,一个辅存磁盘块 (512B)包含32 个目录项。在目录项中, 第 1、2 字节为相应文件的外存i 节点号,是该文件的内部标识;后 14B 为文件名,是该文件的外部标识。所以,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i 节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。 UNIX 的存储介质以 512B 为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。UNIX中的文件系统磁盘存储区分配图如下:0#1#2#K#K+1#K+2#K+3#n#本次课程设计是要实现一个简单的模拟UNIX 文件系统。我们在内存中开辟一个虚拟磁盘空间 (1MB)作为文件存储器,并将该虚拟文件系统保存到磁盘上(以一个文件的形式 ),以便下次可以再将它恢复到内存的虚拟磁盘空间中。文件存储空间的管理可采用位示图方法。3.课程设计任务及要求3.1.设计任务多用户、多级目录结构文件系统的设计与实现。可以实现下列几条命令login 用户登录logout 退出当前用户dir 列文件目录creat 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件mkdir 创建目录ch 改变文件目录rd 删除目录树i 节点区文件存储区引导区管理区名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 36 页 - - - - - - - - - 第 3 页总 36 页format 格式化文件系统quit 退出文件系统3.2.设计要求1) 多用户 :usr1,usr2,usr3, ,usr8 (1-8 个用户 ) 2) 多级目录:可有多级子目录;3) 具有 login (用户登录 )4) 系统初始化(建文件卷、提供登录模块)5) 文件的创建: create ( 用命令行来实现 )6) 文件的打开: open 7) 文件的读: read8) 文件的写: write 9) 文件关闭: close10) 删除文件: delete 11) 创建目录(建立子目录) :mkdir12) 改变当前目录: cd 13) 列出文件目录: dir14) 退出: logout 新增加的功能:15) 删除目录树: rd 16) 格式化文件系统: format 4.算法及数据结构4.1.算法的总体思想本课程设计是要求我们模拟UNIX 文件系统功能设计一个虚拟文件系统,依据UNIX文件系统的特点,其设计思想是:申请 1M 的内存空间来虚拟文件系统,将其以512B 每块划分 2048 块,采用位示图管理文件系统的方法, 利用其原理将第 1 块作为位图区 (512B),共有对 i 节点区和数据块区分别建立位图;每个i 节点占 16B,每块有 512/16=32个 i 节点,用 2、3 共两块作为 i 节点,总共有 64 个 i 节点, 在位图区占用 8B; 其余 2045 块作为数据区 (本课设要求只用到512块),在位图区占用接近256B(2045位)。文件系统存储区分配图如下:位图区i 节点区数据区位图:用 0 表示未使用, 1 表示使用;i 节点:文件控制块 (FCB),描述文件信息的一个数据结构;数据区:存放用户数据,包括目录文件。位示图用以反映整个存储空间的分配情况,由若干字节构成,每个字节中的每一位对应文件存储器中的一块, “1”状态表示相应块已占用, “0”状态表示该块为空闲。存储块分配时,只要把找到的空闲块所对应的位由0 改为 1, 而在释放时, 只要把被释放的物理块所对应的位由1 改为 0 即可。分配和释放都可以在内存的位示图上完成,而名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 36 页 - - - - - - - - - 第 4 页总 36 页且速度较快。磁盘i 节点利用在内存中生成链表或者数组的方法来生成,并且限制磁盘节点数的最大值。同样内存i 节点利用链表的方法在内存中生成。同时在往文件中写或者读的时候我们都是对内存中有内容进行读写。在该文件系统中,规定一个文件最多只能占用2 个数据块,这两个数据块可以是不连续的,其块号记录在一个索引块中,该索引块称为inode 结构。读入一个文件时,先根据目录找到相应的i 节点号,将 i 节点读入主存 i 节点,建立打开文件表指向该主存i 节点,再将文件内容读入主存数据区。4.2.系统总体框架图4.3.系统总体流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 36 页 - - - - - - - - - 第 5 页总 36 页4.4.各模块功能说明4.4.1format 模块功能:格式化文件系统,即初始化文件系统,相当于硬盘的格式化。将其中原有的用户及用户下的文件系统全部还原初始状态,即没有任何用户和目录、文件,也就是按设计的文件系统格式重建新的文件系统。4.4.2 get_blknum和 release_blk模块功能:实现 i 节点的分配和回收;算法:当一个新的文件被建立时,在给该文件分配磁盘存储区之前,应为该文件分配存放该文件的说明信息的磁盘i 节点。反之,当从文件系统中删除某个文件时,则要首先删除它的 i 节点项。4.4.3init()模块功能:进入文件系统算法:初始化用户打开文件系表。在内存中申请一个虚拟存储空间,此空间必须大于开始文件系统是否建立?在内存中申请1M内存空间将磁盘上的文件系统读入内存Y N 用户登录模块,输入用户名和密码,可以在程序中设定,不用保存在文件系统中用户名、密码对吗?执行 init(),进行初始化操作,进入用户子目录执行 command(),对用户输入的命令进行解析和执行。若数据被修改或新建立,则保存主存i 节点和数据块的内容到内存的文件系统,并写回磁盘,保存修改。若输入错误命令则显示出错信息。退出用户 (logout) 吗?用户输入 quit吗?结束执行 format(),建立文件系统N N N Y Y Y 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 36 页 - - - - - - - - - 第 6 页总 36 页或等于可格式化时的空间。将文件系统文件读入虚拟磁盘。4.4.4 quit()模块功能:退出文件系统函数quit() 算法:将虚拟磁盘内容保存到磁盘上。释放虚拟磁盘所占据的空间。撤消用用户打开文件表。4.4.5 Creat()模块功能:创建文件用法: creat filename 算法:分配一空目录项, 分配磁盘块。可用位示图。 填写该空目录项。 如文件长度(0) ,文件名,类型等。分配一个用户打开文件表项,并填写相关目录,读写指针=0。4.4.6 open() 模块功能:打开文件 open() 用法: open filename 算法:if(该文件已打开 or 该文件不存在)报错 (出错信息 )。分配一个用户打开文件表项。4.4.7 close() 模块功能:关闭文件 close() 用法: close filename 算法:释放该文件的用户占据的内存空间。清空该文件的用户打开文件表目。4.4.8 write()模块功能:写文件 write(fd,buf,len) 用法: write filename,需要先打开文件。算法:指定写入内容长度。 buf。修改打开文件表读 /写指针。修改目录项中的文件长度。4.4.9 read() 模块功能: read(fd,buf,len) 用法: read filename, 需先打开文件。算法:文件信息 .修改读 /写指针。4.4.10 delete() 模块功能:删除文件 delete() 用法: delete filename 算法:若文件不存在,报错。回收磁盘空间。回收目录项。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 36 页 - - - - - - - - - 第 7 页总 36 页4.5.该文件系统的数据结构和申明函数/ 用户(20B) typedef struct char user_name10; / 用户名char password10; / 密码 User; / i 节点(32B) typedef struct short inum; / 文件 i 节点号char file_name10; / 文件名char type; / 文件类型char user_name10; / 文件所有者short iparent; / 父目录的 i 节点号short length; / 文件长度short address2; / 存放文件的地址 Inode; / 打开文件表 (16B) typedef struct short inum; / i 节点号char file_name10; / 文件名short mode; / 读写模式 (1:read, 2:write, 3:read and write) short offset; / 偏移量 File_table; / 申明函数void login(void); 用户登录,如果是新用户则创建用户void init(void); 程序初始化 ,将所有 i 节点读入内存int analyse(char *); 输入参数分析,分析用户命令void save_inode(int); 将 num 号 i 节点保存到虚拟磁盘文件hd.dat int get_blknum(void); 申请一个数据块void read_blk(int); 将 i 节点号为 num 的文件读入 temp 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 36 页 - - - - - - - - - 第 8 页总 36 页void write_blk(int); 将 temp 的内容写入 hd.dat的数据区void release_blk(int); 释放文件块号为 num 的文件占用的空间void pathset(); 打印当前路径void deltree(int innum); 实现删除目录树函数int check(int); 检查用户权限/ 用户命令处理函数void help(void); 命令提示帮助函数void cd(void); 改变当前目录void dir(void); 显示当前目录下所有文件和目录void mkdir(void); 创建目录void rd(void); 删除目录void creat(void); 创建文件void open(void); 打开void read(void); 读文件void write(void); 写文件void close(void); 关闭文件void del(void); 删除文件void logout(void); 用户注销void command(void); 命令管理函数void format(void); 格式化虚拟磁盘5.程序设计与实现5.1.主要函数列表函数原型功能入口、出口参数说明void login(void) 用户登陆void init(void) 程序初始化int analyse(char *) 输入参数分析命令行字符串void save_inode(int) 保存 i 节点到虚拟磁盘文件i 节点号int get_blknum(void) 分配一个磁盘块void read_blk(int) 读磁盘快内容i 节点号void write_blk(int) 写磁盘块i 节点号void release_blk(int) 释放一个磁盘块i 节点号void pathset(); 打印当前路径void deltree(int innum); 实现删除目录树函数i 节点号int check(int); 检查用户权限i 节点号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 36 页 - - - - - - - - - 第 9 页总 36 页void help(void) 命令提示帮助函数void dir(void) 显示当前目录下所有文件和目录void mkdir(void) 创建目录void creat(void) 创建文件void open(void) 打开文件void read(void) 读文件void write(void) 写文件void close(void) 关闭文件void del(void) 删除文件void logout(void) 用户登出void command(void) 命令管理函数void rd(void) 删除目录void format(void); 格式化虚拟磁盘5.2.函数之间的关系5.3.程序流程图各功能模块流程图main() login() init() command() analyse() help() cd() dir() mkdir() creat() open() read() write() close() del() logout() cls() errcmd() format() quit() rd() save_inode() read_blk() get_blknum() write_blk() release_blk() delet() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 36 页 - - - - - - - - - 第 10 页总 36 页是否否是提示输入用户名和密码用户名是否存在创建新用户读入用户信息到内存开始密码是否正确结束用户登陆login() 是是否否遍历 i 节点区argv1= ” .”目录是否存在找到的目录i 节点号送当前目录inum_cur 当前目录的父i节点号送当前目录 inum_cur 开始结束改变当前目录cd() 是是否否遍历 i 节点区i 节点的父节点是否为当前目录i 节点区是否遍历完输出文件名或目录名开始结束显示目录dir() 读入位示图信息到内存读入 i 节点信息到内存当前目录为根目录初始化打开文件表结束开始初始化函数init() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 36 页 - - - - - - - - - 第 11 页总 36 页是是否否遍历 i 节点区要创建的目录是否存在是否有空的i 节点遍历 i 节点区分配一个目录i 节点开始结束创建目录 mkdir() 是是否否遍历 i 节点区要创建的文件是否存在是否有空的i 节点遍历 i 节点区分配一个文件i 节点开始结束创建文件 creat() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 36 页 - - - - - - - - - 第 12 页总 36 页是否是否是否遍历 i 节点区要打开的文件是否存在提示输入打开模式将打开文件信息写入打开文件信息表file_array 遍历打开文件表 file_array 文件是否已经打开提示输入开始位置和读字节数调用读块操作,读出块内字符模式是否为可读开始结束开始结束打开文件 open() 读文件 read() 是否是否遍历打开文件表 file_array 文件是否已经打开提示输入写入字节数调用写块操作,写入块内字符模式是否为可写是否遍历打开文件表 file_array 文件是否已经打开将打开文件表项标志位置-1 file_arrayi.inum = -1 开始结束写文件 write() 开始结束关闭文件close() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 36 页 - - - - - - - - - 第 13 页总 36 页是否遍历 i 节点区要删除的文件是否存在释放文件对应的i 节点区inode_arrayi.inum = -1 释放两个磁盘块文件是否大于的一块释放一个磁盘块是否开始结束删除文件del() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 36 页 - - - - - - - - - 第 14 页总 36 页开始遍历 i 节点区是待删除目录吗?遍历子目录子目录为空吗?是文件吗?是空目录吗?结束调用 delet()删除目录或文件是空目录吗?删除目录树rd() 是是否否否否否是是是是否遍历位示图表查找空闲块 bitmap 是否有空闲块分配一块,将位示图位置置 1 。 bitmapi = 1 返回找到的空闲块号将位示图位置置 0 。bitmapi = 0 清空块内容开始结束分配磁盘块get_blk() 开始结束释放磁盘块release_blk(int)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 36 页 - - - - - - - - - 第 15 页总 36 页5.4.源程序/*main.c*/ #include head.h char choice; int argc; / 用户命令的参数个数char *argv5; / 用户命令的参数int inum_cur; / 当前目录char temp2*BLKSIZE; / 缓冲区User user; / 当前的用户char bitmapBLKNUM; / 位图数组Inode inode_arrayINODENUM; / i 节点数组File_table file_arrayFILENUM; / 打 开 文件表数组char image_name10 = hd.dat; / 文 件 系统名称FILE *fp; / 打 开 文件指针/创建映像 hd,并将所有用户和文件清除void format(void) FILE *fp; int i; Inode inode; printf(Will be to format filesystem.n); printf(WARNING:ALL DATA ON THIS FILESYSTEM WILL BE LOST!n); printf(Proceed with Format(Y/N)?); scanf(%c, &choice); gets(temp); if(choice = y) | (choice = Y) if(fp=fopen(image_name, w+b) = NULL) printf(Cant create file %sn, image_name); exit(-1); for(i = 0; i BLKSIZE; i+) fputc(0, fp); inode.inum = 0; strcpy(inode.file_name, /); 是否输出给定i 节点对应的第 1 块内容文件是否大于1 块输出给定i 节点对应的第 2 块内容是否将缓冲区buf 内容写入第 1 块buf 内容是否大于512 字节将缓冲区 buf 的 512字节后面的内容写入第 2 块开始结束写磁盘块write_blk(int)开始结束读磁盘块read_blk(int)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 36 页 - - - - - - - - - 第 16 页总 36 页inode.type = d; strcpy(inode.user_name, all); inode.iparent = 0; inode.length = 0; inode.address0 = -1; inode.address1 = -1; fwrite(&inode, sizeof(Inode), 1, fp); inode.inum = -1; for(i = 0; i 31; i+) fwrite(&inode, sizeof(Inode), 1, fp); for(i = 0; i BLKNUM*BLKSIZE; i+) fputc(0, fp); fclose(fp); / 打开文件 user.txt if(fp=fopen(user.txt, w+) = NULL) printf(Cant create file %sn, user.txt); exit(-1); fclose(fp); printf(Filesystem created successful.Please first login!n); return ; / 功能: 用户登陆,如果是新用户则创建用户void login(void) char *p; int flag; char user_name10; char password10; char file_name10 = user.txt; do printf(login:); gets(user_name); printf(password:); p=password; while(*p=getch() if(*p = 0 x0d) /当输入回车键时,0 x0d 为回车键的 ASCII 码 *p=0; /将输入的回车键转换成空格break; printf(*); /将输入的密码以 * 号显示p+; flag = 0; if(fp = fopen(file_name, r+) = NULL) printf(nCant open file %s.n, file_name); printf(This filesystem not exist, it will be create!n); format(); login(); while(!feof(fp) fread(&user, sizeof(User), 1, fp); / 已经存在的用户 , 且密码正确if(!strcmp(user.user_name, user_name) & 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 36 页 - - - - - - - - - 第 17 页总 36 页!strcmp(user.password, password) fclose(fp); printf(n); return ; / 已经存在的用户 , 但密码错误else if(!strcmp(user.user_name, user_name) printf(nThis user is exist, but password is incorrect.n); flag = 1; fclose(fp); break; if(flag = 0) break; while(flag); / 创建新用户if(flag = 0) printf(nDo you want to creat a new user?(y/n):); scanf(%c, &choice); gets(temp); if(choice = y) | (choice = Y) strcpy(user.user_name, user_name); strcpy(user.password, password); fwrite(&user, sizeof(User), 1, fp); fclose(fp); return ; if(choice = n) | (choice = N) login(); / 功能: 将所有 i 节点读入内存void init(void) int i; if(fp = fopen(image_name, r+b) = NULL) printf(Cant open file %s.n, image_name); exit(-1); / 读入位图for(i = 0; i BLKNUM; i+) bitmapi = fgetc(fp); / 显示位图/ 读入 i 节点信息for(i = 0; i INODENUM; i+) fread(&inode_arrayi, sizeof(Inode), 1, fp); / 显示 i 节点/ 当前目录为根目录inum_cur = 0; / 初始化打开文件表for(i = 0; i FILENUM; i+) file_arrayi.inum = -1; / 功能 : 分析用户命令, 将分析结果填充argc和 argv / 结果: 0-14 为系统命令 , 15为命令错误int analyse(char *str) int i; char temp20; char *ptr_char; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 36 页 - - - - - - - - - 第 18 页总 36 页char *syscmd=help, cd, dir, mkdir, creat, open, read, write, close, delete, logout, clear,format,quit,rd; argc = 0; for(i = 0, ptr_char = str; *ptr_char != 0; ptr_char+) if(*ptr_char != ) while(*ptr_char != & (*ptr_char != 0) tempi+ = *ptr_char+; argvargc = (char *)malloc(i+1); strncpy(argvargc, temp, i); argvargci = 0; argc+; i = 0; if(*ptr_char = 0) break; if(argc != 0) for(i = 0; (i 15) & strcmp(argv0, syscmdi); i+); return i; else return 15; / 功能: 将 num 号 i 节点保存到 hd.dat void save_inode(int num) if(fp=fopen(image_name, r+b) = NULL) printf(Cant open file %sn, image_name); exit(-1); fseek(fp, 512+num*sizeof(Inode), SEEK_SET); fwrite(&inode_arraynum, sizeof(Inode), 1, fp); fclose(fp); / 功能: 申请一个数据块int get_blknum(void) int i; for(i = 0; i 512) add1 = inode_arraynum.address1; if(fp = fopen(image_name, r+b) = NULL) printf(Cant open file %s.n, image_name); exit(-1); fseek(fp, 1536+add0*BLKSIZE, SEEK_SET); ch = fgetc(fp); for(i=0; (i len) & (ch != 0) & (i = 512) fseek(fp, 1536+add1*BLKSIZE, SEEK_SET); ch = fgetc(fp); for(; (i len) & (ch != 0); i+) tempi = ch; ch = fgetc(fp); tempi = 0; fclose(fp); / 功能: 将 temp的内容输入 hd 的数据区void write_blk(int num) int i, len; int add0, add1; add0 = inode_arraynum.address0; len = inode_arraynum.length; if(fp = fopen(image_name, r+b) = NULL) printf(Cant open file %s.n, image_name); exit(-1); fseek(fp, 1536+add0*BLKSIZE, SEEK_SET); for(i=0; (ilen)&(tempi!=0)&(i 512); i+) fputc(tempi, fp); if(i = 512) add1 = inode_arraynum.address1; fseek(fp, 1536+add1*BLKSIZE, SEEK_SET); for(; (i len) & (tempi != 0); i+) fputc(tempi, fp); fputc(0, fp); fclose(fp); / 功能: 释放文件块号为 num的文件占用的空间void release_blk(int num) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 36 页 - - - - - - - - - 第 20 页总 36 页FILE *fp; if(fp=fopen(image_name, r+b) = NULL) printf(Cant open file %sn, image_name); exit(-1); bitmapnum = 0; fseek(fp, num, SEEK_SET); fputc(0, fp); fclose(fp); / 功能: 显示帮助命令void help(void) printf(command: n help - show help menu n clear - clear the screen n cd - change directory n mkdir - make directory n creat - create a new file n open - open a exist file n read - read a file n write - write something to a file n close - close a file n delete - delete a exist file n format - format a exist filesystem n logout - exit user n rd - delete a directory n quit - exit this systemn); /设置文件路径void pathset() char path50; int m,n; if(inode_arrayinum_cur.inum = 0) strcpy(path,user.user_name); else strcpy(path,user.user_name); m=0; n=inum_cur; while(m != inum_cur) while(inode_arrayn.iparent != m) n = inode_arrayn.iparent; strcat(path,/); strcat(path,inode_arrayn.file_name); m = n; n = inum_cur; printf(%s,path); / 功能: 切换目录 (cd . 或者 cd dir1) void cd(void) int i; if(argc != 2) printf(Command cd must have two args. n); return ; if(!strcmp(argv1, .) inum_cur = inode_arrayinum_cur.iparent; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 36 页 - - - - - - - - - 第 21 页总 36 页 / 遍历 i 节点数组for(i = 0; i 0)& (inode_arrayi.type=d)& (inode_arrayi.iparent=inum_cur)& !strcmp(inode_arrayi.file_name,argv1)& check(i) break; if(i = INODENUM) printf(This directory isnt exsited.n); else inum_cur = i; / 功能 : 显示当前目录下的子目录和文件(dir) void dir(void) int i; int dcount=0,fcount=0; short bcount=0; if(argc != 1) printf(Command dir must have one args. n); return ; / 遍历 i 节点数组 , 显示当前目录下的子目录和文件名for(i = 0; i 0) & (inode_arrayi.iparent = inum_cur) if(inode_arrayi.type = d & check(

    注意事项

    本文(2022年+模拟UNIX文件系统的设计及实现 .pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开