操作系统-文件系统源代码

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

#include

#include

#include

#include

#define BLOCKSIZE 1024

#define SIZE 1024000

#define END 65535

#define FREE 0

#define ROOTBLOCKNUM 2

#define MAXOPENFILE 10

typedef struct FCB//unsigned

{

char filename[8];

char exname[3];

unsigned char attribute;

char reserve[10];//me:保留区(图3-2 MS-DOS的文件控制块)

unsigned short time;

unsigned short data;

unsigned short first;

unsigned long length;

}fcb;

typedef struct FAT

{

unsigned short id;

}fat;

typedef struct USEROPEN

{

fcb openfile[MAXOPENFILE];

char dir[MAXOPENFILE][80];//me:用来记录每个打开文件所在的目录名,以方便用户打开不同目录下具有相同文件名的不同文件。

//me:即,相应打开文件所在的目录名,这样方便快速检查出指定文件是否已经打开

int count;

}useropen;

typedef struct BLOCK0 /*引导块内容*/

{

char information[200];//赋值50时本身已经越界

unsigned char *startblock;//me:虚拟磁盘上数据区开始位置

}block0;

unsigned char *myvhard;

useropen *openfilelist;

char currentdir[80];//me: 记录当前目录的目录名(包括目录的路径)unsigned char* startp;//me:记录虚拟磁盘上数据区开始位置

void initsys();

void format();

void startsys();

void exitsys();

void create();

int open(char *filename);

void close(int fd);

void mywrite(int fd,char *buff);

void myread(int fd,char *buff);

void deletefile(char *filename);

void ls();

void listopenfile();

void cd(char *dirname);

//系统初始化:创建虚盘和格式化虚盘

void initsys()

{

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

memset(myvhard,0,SIZE);

format();

}

void format()

{

FILE *fp;

time_t *now;

struct tm *nowtime;

unsigned char *p;

fat *fat1,*fat2;

fcb *root;

int i,a;

block0 *b0;

now=(time_t *)malloc(sizeof(time_t));

p=myvhard;

b0=(block0 *)p;

strcpy(b0->information,"My filesystem,version0.01,blocksize is 1K,whole size is 1000K,emulate FAT16,Max open file number is 10");

//printf("\n %s",b0->information);

p+=BLOCKSIZE;//me:将虚拟磁盘的第一块分配给了引导块

//me:给两个FAT各分配两个盘块

fat1=(fat *)(p);

fat2=(fat *)(p+BLOCKSIZE*2);

//me:对于每个FAT中,前面5个块设置为已分配,后面995个块设置为空闲;

//me:即,将两个fat表的前5个表项的id赋值END,第6项为的id赋值6(指向虚拟磁盘的第6块(即根目录文件所在块))

fat1->id=END;

fat2->id=END;

fat1++;

fat2++;

fat1->id=END;

fat2->id=END;

fat1++;

fat2++;

fat1->id=END;

fat2->id=END;

fat1++;

fat2++;

fat1->id=END;

fat2->id=END;

fat1++;

fat2++;

fat1->id=END;

fat2->id=END;

fat1++;

fat2++;

fat1->id=6;

fat2->id=6;

fat1++;

fat2++;

fat1->id=END;

fat2->id=END;

fat1++;

fat2++;

//me:从第7个表项开始,初始化全部是空闲的

for(i=7;i

{

(*fat1).id=FREE;

(*fat2).id=FREE;

fat1++;

fat2++;

相关文档
最新文档