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