操作系统文件件系统

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

#include

#include

#include

#include

#include

#define BLOCKSIZE 1024 /*磁盘块大小*/

#define SIZE 1024000 /*虚拟磁盘空间大小 */

#define END 65535 /*FAT中文件结束标志*/

#define FREE 0 /*FAT中盘块空闲标识符*/

#define ROOT_BLOCKNUM 2 /*根目录区所占盘块总数*/

#define MAX_OPEN_FILE 10 /*最多同时打开文件个数 */

#define MAX_TXT_SIZE 10000

typedef struct FCB

{

char filename[8]; /*8B文件名*/

char exname[3]; /*3B扩展名*/

unsigned char attribute; /*文件属性字段*/

char retainbyte[10] ; /*10B保留字*/

unsigned short time; /*文件创建时间*/

unsigned short date; /*文件创建日期*/

unsigned short first; /*首块号*/

unsigned long length; /*文件大小*/

}fcb;

/*

文件分配表 file allocation table

*/

typedef struct FAT

{

unsigned short id;

}fat;

/*

属性对照表

位 7 6 5 4 3 2 1 0 属性保留保留存档子目录卷标系统文件隐藏只读*/

typedef struct USEROPEN

{

char filename[8]; /*8B文件名*/

char exname[3]; /*3B扩展名*/

unsigned char attribute; /*文件属性字段*/

char retainbyte[10] ; /*10B保留字*/

unsigned short time; /*文件创建时间*/

unsigned short date; /*文件创建日期*/

unsigned short first; /*首块号*/

unsigned long length; /*文件大小*/

char free; /*表示目录项是否为空 0空1分配*/

int father; /*父目录的文件描述符*/

int dirno; /*相应打开文件的目录项在父目录文件中的盘块号*/

int diroff; /*相应打开文件的目录项在父目录文件的dirno盘块中的目录项序号*/ char dir[MAX_OPEN_FILE][80]; /*相应打开文件所在的目录*/

int count; /*读写指针在文件中的位置*/

char fcbstate; /*是否修改了文件的FCB内容,修改置1,否则为0*/

char topenfile; /*表示该用户打开的表项是否为空,若值为0,表示为空*/

}useropen;

typedef struct BLOCK0

{

unsigned short fbnum;

char information[200];

unsigned short root;

unsigned char *startblock;

}block0;

/*全局变量定义*/

unsigned char *myvhard; /*指向虚拟磁盘的起始地址*/

useropen openfilelist[MAX_OPEN_FILE]; /*用户打开文件表数组*/

useropen *ptrcurdir; /*指向用户打开文件表中的当前目录所在打开文件表项的位置*/

int curfd;

char currentdir[80]; /*记录当前目录的文件名*/

unsigned char *startp; /*记录虚拟磁盘上数据区开始位置*/

char filename[]="c:\\myfilesys"; /*虚拟空间保存路径*/

unsigned char buffer[SIZE];

/*函数声明*/

void startsys();

void my_format();

void my_cd(char *dirname);

void my_mkdir(char *dirname);

void my_rmdir(char *dirname);

void my_ls();

void my_create(char *filename);

void my_rm(char *filename);

int my_open(char *filename);

int my_close(int fd);

int my_write(int fd);

int do_write(int fd,char *text,int len,char wstyle);

unsigned short findFree();

int my_read(int fd,int len);

int do_read(int fd,int len,char *text);

void my_exitsys();

/*函数设计*/

/*文件系统初始化*/

/*

原型声明: void startsys()

功能描述:文件系统初始化,初始化所建立的文件系统

输入:无

输出:无

函数功能实现算法描述:

1)申请磁盘空间

2)打开系统磁盘,若不存在,创建新的系统磁盘,并格式化

3)初始化用户打开文件表,将表项0分配给根目录文件使用

并填写根目录文件的相关信息

4)将ptrcurdir指向该用户打开文件表项

5)将当前目录设置为根目录

*/

void startsys()

{

FILE *fp;

int i;

myvhard=(unsigned char *)malloc(SIZE);

memset(myvhard,0,SIZE);

fp=fopen(filename,"r");

if(fp)

{

fread(buffer,SIZE,1,fp);

fclose(fp);

if(buffer[0]!=0xaa||buffer[1]!=0xaa)

{

printf("myfilesys is not exist,begin to creat the file...\n");

my_format();

}

相关文档
最新文档