unix文件系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模拟Unix文件系统寒假实践报告

学号:19212122

班级:计科121

姓名:单旭

组长:顾建东

课程设计具体进展:

以初步完成设计及代码编写,需要进行进一步的调试和完善。

具体设计:

【课设原理】

UNIX采用树型目录结构,每个目录表称为一个目录文件。

一个目录文件是由目录项组成的。每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。所以,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。UNIX中的文件系统磁盘存储区分配图如下:

i节点区文件存储区

本次课程设计是要实现一个简单的模拟UNIX文件系统。我们在磁盘中申请一个二进制文件模拟UNIX内存,依次初始化建立位示图区,I节点区,数据块区。并给已打开的文件建立文件打开表。

设计思想:

先建立512个块,每个块对应512个字节,在建立一个有512个元素的字符数组,每个元素对应相应的块号,不管是文件或是目录都有I节点,建立自己设定数目元素的I节点表,并依次把位图区,I节点表,数据块区每个元素映射到一个二进制文件上。在每一次的操作中如果相应元素有变动,则对应在文件中更新输出相应数据,以便下一次启动程序的时候可以快速导入上一次的数据。

数据结构:

//用户

typedef struct

{

char user_name[10]; // 用户名

char password[10]; // 密码

} User;

//i节点

typedef struct

{

short inum; // 文件i节点号

char file_name[10]; // 文件名

char type; // 文件类型

char user_name[10]; // 文件所有者

short iparent; // 父目录的i节点号

short length; // 文件长度

short address[2]; // 存放文件的地址

} Inode;

//打开文件表

typedef struct

{

short inum; // i节点号

char file_name[10]; // 文件名

short mode; // 读写模式(1:read, 2:write,

// 3:read and write)

} File_table;

设计的功能:

1.format模块

功能:

格式化文件系统,即初始化文件系统,相当于硬盘的格式化。将其中原有的用户及用户下的文件系统全部还原初始状态,即没有任何用户和目录、文件,也就是按设计的文件系统格式重建新的文件系统。

2. get_blknum和release_blk模块

功能:

get_blknum找到一个空闲数据块,并修改对应位图号元素为1。

release_blk修改对应的位图元素,并把文件系统中对应的数据块清零。

3. init()模块

功能:读入文件系统

4.quit()模块

功能:退出系统

5 .creat()模块

功能:

创建文件,分配一空目录项,分配磁盘块。可用位示图。填写该空目录项。如文件长度(0),文件名,类型等。

6. open()模块

功能:

打开文件,并判断文件类型和打开方式。如果文件没有在文件打开表中就在文件打开表中建立该文件项。

7. close()模块

功能:

关闭文件,删除该文件的用户打开文件表目。

8. write()模块

功能:

写文件,需要先打开文件。并判断文件权限。写完后修改文件系统中的对应数据区。

9. read()模块

功能:读文件。需先打开文件。读入相应数据块的内容到缓冲区,然后输出。

10.delet()模块

功能:

如果参数是文件则删除文件,如果是目录则删除该目录下的所有文件和目录。

11.mkdir()

功能:建立新的目录,先在I节点表中找到一个未使用的,并初始化该I节点,并在文件系统中对应更新输出。

12.cd()

功能:将当前目录切换到当前目录的一个子目录下或当前目录的父目录。

具体的函数名及其功能:

void format(void) //创建映像hd,并将所有用户和文件清除

void login(void) // 功能: 用户登陆,如果是新用户则创建用户

void init(void) // 功能: 将所有i节点读入内存

int analyse(char *str) // 功能: 分析用户命令, 将分析结果填充argc和argv

void save_inode(int num) // 功能: 将num号i节点保存到hd.dat

int get_blknum(void) // 功能: 申请一个数据块

void read_blk(int num) // 功能: 将i节点号为num的文件读入temp

void write_blk(int num) // 功能: 将temp的内容输入hd的数据区

void release_blk(int num) // 功能: 释放文件块号为num的文件占用的空间

void help(void) // 功能: 显示帮助命令

void pathset()//设置文件路径

void cd(void) // 功能: 切换目录(cd .. 或者cd dir1)

void dir(void) // 功能: 显示当前目录下的子目录和文件(dir)

void mkdir(void) // 功能: 在当前目录下创建子目录(mkdir dir1)

void create(void) // 功能: 在当前目录下创建文件(creat file)

void open()// 功能: 打开当前目录下的文件(open file1)

void read()// 功能: 从文件中读出字符(read file1)

void write()// 功能: 向文件中写入字符(write file1)

void close(void) // 功能: 关闭已经打开的文件(close file1)

void del(int i) //回收i节点,有文件则删除文件

void delet(void) //删除子目录树和文件

void logout()// 功能: 退出当前用户(logout)

void quit()// 功能: 退出文件系统(quit)

void errcmd()// 功能: 显示错误

void free_user()//清空内存中存在的用户名

相关文档
最新文档