二级文件管理课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统二级文件管理课程设计
课程设计名称:二级文件管理系统
专业班级:
学生姓名:
学号
指导老师:
一、设计目的
二、设计内容
为linux系统设计一个简单的二级文件系统。要求做到以下几点:
(1)可以实现下列几条命令(至少4条);
login 用户登陆
dir 列文件目录
create 创建文件
delete 删除文件
open 打开文件
close 关闭文件
read 读文件
write 写文件
rename 重命名
(2)列目录时要列出文件名、物理地址、保护码和文件长度;
(3)源文件可以进行读写保护。
三、程序设计
1、在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2、文件物理结构可采用显式链接或其他方法。
3、磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
4、文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
5、设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:用户登录、创建目录、删除目录、创建文件、删除文件、读文件、写文件、重命名、退出。
四、源代码
1、FileSystem.h
#define DIR_LENGTH 1024 //路径最长可达100字节
#define MAX_WRITE 1024*128 //写入文字可达128k字节
#define MEM_D_SIZE 1024*1024 //1M磁盘空间
#define DISKSIZE 1024 //磁盘块的大小 1K
#define MSD 5 //最大子目录数 5
#define DISK_NUM MEM_D_SIZE/DISKSIZE //磁盘块数目 1024=1M/1K
#define FATSIZE DISK_NUM*sizeof(struct FatItem) //FAT表大小1024*8=8K
#define MOFN 5 //最大文件打开数 5
#define ROOT_DISK_NO FATSIZE/DISKSIZE+1 //根目录起始盘块号 9
#define ROOT_DISK_SIZE sizeof(struct Direct) //根目录大小 196
#define LOGIN 15
#define NAME_LONG 1
#define NOT_EXSIT -1
#define OPEN_FULL -3
#define ALREADY -4
#define NOT_R_W -4
#define DISK_FULL -5
#define NOT_EXIT -1
struct FatItem // size 8
{ int item; //存放文件下一个磁盘的指针char em_disk; //磁盘块是否空闲标志位, 0 空闲};
struct Direct
{ struct FCB
{ char name[8]; //文件/目录名 8位
char property; //属性 1位目录 0位普通文件
int size; //文件/目录字节数、盘块数)
int firstDisk; //文件/目录起始盘块号
int next; //子目录起始盘块号
int sign; //1是根目录 0不是根目录}directItem[MSD+2]; //最大子目录 5
};
struct OpenTable
{ struct OpenTableItem
{ char name[9]; //文件名
int firstdisk; //起始盘块号
int size; //文件的大小
char open_flag; //文件打开标志:'1':打开。'0':未打开}openitem[MOFN]; //最大文件打开数 5
int cur_size; //当前打文件的数目};
struct FatItem *fat; //FAT表
struct Direct *root; //根目录
struct Direct *cur_dir; //当前目录
struct OpenTable user_openTable; //文件打开表
int fd=-1; //文件打开表的序号
char *bufferdir; //记录当前路径的名称
char *fdisk; //虚拟磁盘起始地址
int cur_user;
int find_N = 0;
void init();
void format();
void enter();
void assign();
int create(char *name);
int open(char *name);
int close(char *name);
int rename();
int write(int fd,char *buf,int len,char *name);
int read(int fd,char *buf,char *name);
int del(char *name);
void dir();
int login();
void helpMenu();
void currentPath();