教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 小学教育 >

模拟实现单级目录、单级索引的索引文件系统(2)

来源:网络收集 时间:2025-09-14
导读: fread(dir,DirSize*32,1,fp); return fp; } int CLOSESYS(FILE *stream) { int i; fseek(stream,sys1.resblocknum*BlockSize,0); fwrite(fat1,sizeof(int)*sys1.sysblocknum,1,stream); fseek(fp,(sys1.fatblocknum

fread(dir,DirSize*32,1,fp); return fp; }

int CLOSESYS(FILE *stream) { int i;

fseek(stream,sys1.resblocknum*BlockSize,0); fwrite(fat1,sizeof(int)*sys1.sysblocknum,1,stream);

fseek(fp,(sys1.fatblocknum+sys1.resblocknum)*BlockSize,0); fwrite(dir,DirSize*32,1,fp); fclose(fp); return 1; }

void LISTDIR(void)/*显示目录*/ { int i,flag=0; for(i=0;i<32;i++)

{ if(fil[i].firstblockaddr!=0) { if(flag==0)

printf("filename \n"); flag=1; /*标示*/

printf("%s\n",fil[i].filename); } } }

int FCREATE(char *filename)/*建立文件*/ { int i,flag=0,j,k=0,flag1=0,flag2=0,a; int n,m; while(1)

{a=strlen(filename);/*文件名长度*/ if(a>10)

{printf("This file length too long!\n"); printf("input file name again:"); scanf("%s",filename); }else

break; } while(1)

{ for(i=0;i<32;i++)

if(strcmp(filename,fil[i].filename)==0) { printf("the name already exist \n"); printf("input name again:");

flag1=1; break; }

if(flag1==0) break;

scanf("%s",filename); flag1=0; }

for(i=(sys1.fatblocknum+sys1.resblocknum+sys1.rootblocknum);i<sys1.sysblocknum;i++) if(fat1[i]==0)

flag++;/*统计磁盘上为空数目*/ if(flag==0)

{ printf("ci pan yi man");/*统计结果为0,则磁盘已满*/ return 0; }

printf("kong xian kuai shu:%d\n",flag); printf("input file length:"); for(j=0;j<32;j++)

if(fil[j].firstblockaddr==0) break; while(1)

{scanf("%d",&dir[j].filelen);/*输入目录项中文件的长度*/ n=(dir[j].filelen/BlockSize)+(dir[j].filelen%BlockSize?1:0); if(n<0||n>flag)/*文件长度小于0或大于空闲的空间 */ {printf("input length too long!\n"); printf("input again:"); } else break; }

for(i=(sys1.fatblocknum+sys1.resblocknum+sys1.rootblocknum);i<sys1.sysblocknum;i++)/*文件内容区域*/ { if(fat1[i]==0) { k++;

if(flag2==0)

{ dir[j].firstblockaddr=i+1; flag2=1; } else

{ if(k>=n)/*n 文件长度*/ { fat1[m]=i+1; fat1[i]=-1; break; }else

fat1[m]=i+1; } m=i;

}

strcpy(dir[j].filename,filename); dir[j].filename[a]='\0'; printf("input year:"); scanf("%d",&dir[j].year); printf("input month:"); scanf("%d",&dir[j].month); printf("input day:"); scanf("%d",&dir[j].day); return (1); }

int FDELETE(char *filename)/*删除文件 */ {int i,j,k,n,flag=0;

struct FCBBlock *p;/*文件控制块指针*/ p=fcb; while(p)

{if(strcmp(filename,fil[p->fdtblockindex].filename)==0)/*目录项所在序号 */ {printf("the file has open,please close it before delete !\n"); return 0; } else

p=p->next; }

for(i=0;i<32;i++)/*查找要关闭的文件 */ if(strcmp(filename,fil[i].filename)==0) { flag=1; break; }

if(flag==0)

{printf("file cannot find!\n"); return 0; }

j=fil[i].firstblockaddr; while(1)

{ k=fat1[j-1];

fseek(fp,(j-1)*BlockSize,0);/*将指针指向文件的第一个扇区的位置 */ fwrite(&fillchar,1,BlockSize,fp); fat1[j-1]=0; if(k==-1) break; else

j=k; }

memset(&fil[i],0,DirSize);

…… 此处隐藏:533字,全部文档内容请下载后查看。喜欢就下载吧 ……
模拟实现单级目录、单级索引的索引文件系统(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/39233.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)