操作系统磁盘文件管理源码Word文件下载.docx
- 文档编号:13314599
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:35
- 大小:18.88KB
操作系统磁盘文件管理源码Word文件下载.docx
《操作系统磁盘文件管理源码Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统磁盘文件管理源码Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。
charem_disk;
/*磁盘块是否空闲标志位0空闲*/
};
structdirect
/*-----文件控制快信息-----*/
structFCB
{
charname[9];
/*文件/目录名8位*/
charproperty;
/*属性1位目录0位普通文件*/
intsize;
/*文件/目录字节数、盘块数)*/
intfirstdisk;
/*文件/目录起始盘块号*/
intnext;
/*子目录起始盘块号*/
intsign;
/*1是根目录0不是根目录*/
}directitem[MSD+2];
structopentable
structopenttableitem
/*文件名*/
/*起始盘块号*/
/*文件的大小*/
}openitem[MOFN];
intcur_size;
/*当前打文件的数目*/
structfatitem*fat;
/*FAT表*/
structdirect*root;
/*根目录*/
structdirect*cur_dir;
/*当前目录*/
structopentableu_opentable;
/*文件打开表*/
intfd=-1;
/*文件打开表的序号*/
char*bufferdir;
/*记录当前路径的名称*/
char*fdisk;
/*虚拟磁盘起始地址*/
voidinitfile();
voidformat();
voidenter();
voidhalt();
intcreate(char*name);
intopen(char*name);
intclose(char*name);
intwrite(intfd,char*buf,intlen);
intread(intfd,char*buf);
intdel(char*name);
intmkdir(char*name);
intrmdir(char*name);
voiddir();
intcd(char*name);
voidprint();
voidshow();
voidinitfile()
fdisk=(char*)malloc(MEM_D_SIZE*sizeof(char));
/*申请1M空间*/
format();
}
voidformat()
inti;
FILE*fp;
fat=(structfatitem*)(fdisk+DISKSIZE);
/*计算FAT表地址,引导区向后偏移1k)*/
/*-----初始化FAT表------------*/
fat[0].item=-1;
/*引导块*/
fat[0].em_disk='
1'
;
for(i=1;
i<
ROOT_DISK_NO-1;
i++)/*存放FAT表的磁盘块号*/
fat[i].item=i+1;
fat[i].em_disk='
}
fat[ROOT_DISK_NO].item=-1;
/*存放根目录的磁盘块号*/
fat[ROOT_DISK_NO].em_disk='
for(i=ROOT_DISK_NO+1;
DISK_NUM;
i++)
fat[i].item=-1;
fat[i].em_disk='
0'
/*-----------------------------------------------*/
root=(structdirect*)(fdisk+DISKSIZE+FATSIZE);
/*根目录的地址*/
/*初始化目录*/
/*---------指向当前目录的目录项---------*/
root->
directitem[0].sign=1;
directitem[0].firstdisk=ROOT_DISK_NO;
strcpy(root->
directitem[0].name,"
."
);
directitem[0].next=root->
directitem[0].firstdisk;
directitem[0].property='
directitem[0].size=ROOT_DISK_SIZE;
/*-------指向上一级目录的目录项---------*/
directitem[1].sign=1;
directitem[1].firstdisk=ROOT_DISK_NO;
directitem[1].name,"
.."
directitem[1].next=root->
directitem[1].property='
directitem[1].size=ROOT_DISK_SIZE;
if((fp=fopen("
disk.dat"
"
wb"
))==NULL)
printf("
Error:
\nCannotopenfile\n"
return;
for(i=2;
MSD+2;
i++)/*-子目录初始化为空-*/
root->
directitem[i].sign=0;
directitem[i].firstdisk=-1;
strcpy(root->
directitem[i].name,"
"
directitem[i].next=-1;
directitem[i].property='
directitem[i].size=0;
if(fwrite(fdisk,MEM_D_SIZE,1,fp)!
=1)/*把虚拟磁盘空间保存到磁盘文件中*/
\nFilewriteerror!
\n"
fclose(fp);
voidenter()
if((fp=fopen("
rb"
\nCannotopenfile\n"
if(!
fread(fdisk,MEM_D_SIZE,1,fp))/*把磁盘文件disk.dat读入虚拟磁盘空间(存)*/
\nCannotreadfile\n"
exit(0);
/*找到FAT表地址*/
/*找到根目录地址*/
/*--------------初始化用户打开表------------------*/
for(i=0;
MOFN;
strcpy(u_opentable.openitem[i].name,"
u_opentable.openitem[i].firstdisk=-1;
u_opentable.openitem[i].size=0;
u_opentable.cur_size=0;
cur_dir=root;
/*当前目录为根目录*/
bufferdir=(char*)malloc(DIR_MAXSIZE*sizeof(char));
strcpy(bufferdir,"
Root:
}
voidhalt()
fwrite(fdisk,MEM_D_SIZE,1,fp))/*把虚拟磁盘空间(存)容读入磁盘文件disk.dat*/
\nFilewriteerror!
\n"
free(fdisk);
free(bufferdir);
return;
intcreate(char*name)
inti,j;
if(strlen(name)>
8)/*文件名大于8位*/
return(-1);
for(j=2;
j<
j++)/*检查创建文件是否与已存在的文件重名*/
if(!
strcmp(cur_dir->
dir
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 磁盘 文件 管理 源码