. . .
理工大学信息工程与自动化学院学生实验报告
( 201 —201 学年 第 二 学期 )
课程名称:操作系统 开课实验室: 年 月 日 年级、专业、班 实验项目名称 教师评语 教师签名: 年 月 日 一、实验目的
用C或C++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。从而对各种文件操作命令的实质容和执行过程有比较深入的了解。
二、实验原理及基本技术路线图(框原理图)
用C模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。
学号 文件管理 姓名 指导教师 成绩 功能设计 :
z
Help dir exit create [文件名] cdir [目录名] read [文件名] close[文件名] edit [文件名] cd [目录名] attr [文件名] del [文件名] rename [文件名] 显示命令帮助
显示当前目录下的文件和文件夹 退出系统 创建文本文件 创建文件夹
读取一个文件最多可同时读取五个 关闭一个文件 编辑一个文件
进子目录或者上级目录 显示该文件的属性 删除文件 重命名
. . .
z
. . .
编辑功能流程图
删除文件流程图
创建文件流程图
核心算法:
z
bool Format(void); //格式化
bool install(void); //装载虚拟硬盘的数据
. . .
void login(void); /用户登陆
void showMenu(void);//显示功能菜单 bool onAction(void);//用户选择功能并执行 void createFile(string str);//创建文件 bool read(string str);//读取文件 void editFile(string str);//编辑文件 void Delete(string str);//删除一个文件
数据结构:
始地址
/*inode结构体*/ struct inode{
unsigned short di_tag; /*inode标识*/ const unsigned int ACCOUNT_NUM=10;
//用户数量
/*---------常变量------*/
const unsigned int BLOCK_SIZE=512;
//块长
const unsigned int DATA_BLOCK_NUM=512; //数据块数量 const unsigned int DINODE_START=4*BLOCK_SIZE; const unsigned int DINODE_SIZE=512; const unsigned int DINODE_NUM=32;
//inode起始位置
//inode大小 //inode数量
const unsigned int DATASTART=(2+DINODE_NUM)*BLOCK_SIZE; //数据区的开
unsigned short di_number; /*关联文件数,当为0时表示删除文件,如一个目录至少
z
包含两个文件:\和\
. . .
unsigned short di_mode; /*存取模式:0为目录,1为文件*/
/*当前inode所属用户 0为根目录ID,一次下去是管理
录、用户目录*/
unsigned short di_userID; 员目
};
/**超级块***/ struct super_block{ };
/**账户信息**/ struct user{
z
unsigned short di_access;
/*访问权限 0为不允普通用户访问(公共目录),1为允普通用户访问*/
unsigned short di_size; /*文件大小,目录没有大小,值为0*/ unsigned short di_ctime; /* 创建时间 */ unsigned short di_mtime; /* 最后一次修改时间*/
unsigned short di_block[DATA_BLOCK_NUM]; /* 数据块块地址编号 */
unsigned short s_inodes_count; /* 文件系统中inode的总数 */ unsigned short s_blocks_count; /* 数据块总数 */ unsigned short s_r_blocks_count; /* 保留块总数 */ unsigned short s_free_blocks_count; // 空闲块总数
unsigned short s_free_inodes_count; /* 空闲的inode总数 */ unsigned short s_log_block_size; /* block 的大小 */
unsigned short user_id; //用户ID
unsigned short user_access; //权限 string username; string password;
//用户名 //密码