二级文件管理课程设计

  • 格式:doc
  • 大小:208.00 KB
  • 文档页数:17

下载文档原格式

  / 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();