华南理工大学软件学院
2013级操作系统大作业实验报告
课程名称: 操作系统
任课老师:
作业题目: 简单二级文件系统
班 级:
学生姓名:
学 号:
目录
实验目12实验环实验内3
程序中使用的数据结构及符号说45源程序及注6程序运行时的初值和运行结
一、 实验目的
通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
二、 实验环境
操作系统:Ubuntu 12.04 (Ubuntu/Linaro 4.6.3-1ubuntu5)
编译器: gcc 4.6.3
语言:C语言
三、 实验内容
FMSV1.0系统模拟了原生的文件系统,使用文本来当作磁盘,并使用了空闲块记录表,目录,i-node等数据结构来辅助文件系统的运作。
磁盘:一个名为blockDisk的文件,里面含有256个数据块。每个数据块的长度为1024,可存储1024个字符。
I节点:包含文件名,文件保护码,文件长度,文件存放位置。
目录:一个链表,记录了i节点。
空闲块记录表FBT:用于记录磁盘块使用情况,0表示未使用,1表示使用。
数据块:保存了文件的数据,一个数据块至多存放一个文件。
数据块使用情况:用于记录文件使用数据块的情况。存放在I 数组中。fat节点的.
文件:一个文件最多占用两个数据块,即长度至多为4028.
FMSV1.0系统支持的命令行:
login:登录
register:注册
open:打开文件
read:读取文件数据到屏幕
write:写文件,分为cover和append两种类型;cover是覆盖原数据,append是在不改变原始数据的基础上进行增加。
close:关闭文件
create:新增文件
delete:删除文件
exit:退出程序
help:帮助
四、 程序中使用的数据结构及符号说明
/*---------------结构定义-----------------*/
/*---------用户--------*/
typedef struct user
{
char account[15]; //账户最长为10
char password[15]; //密码最长为10,多出来的是为了方便运算
}user;
/*--------数据节点--------*/
typedef struct datanode //用于记录文件数据保存在哪个数据块的哪个范围
{
int num; //数据块号
int begin; //数据开始位置
int end; //数据结束位置
}datanode;
/*-------i节点--------*/
typedef struct inode
{
Char filename[30];
Int num;
char code[30]; //保护码
int size;
datanode fat[MAX_DATANODE_NUM];
int node _num;
}inode;
typedef struct dirEntry //用链表来记录I节点
{
inode ind;
struct dirEntry *next;
}dirEntry;
/*-------数据块--------*/
typedef struct block
{
char content[MAX_BLOCK_SIZE]; //数据块内容最大长度为 1025,预留最后一位用来存储'\0',
int num;
int offset; //记录当前数据的数量
}block;
五、 源程序及注释
head.h头文件
#include
#include
#include
#include
#define MAX_BLO