模拟实现单级目录的FAT文件系统(4)

2020-04-21 07:38

{ if(flag==0)

printf(\文件名 大小 创建日期\\n\ flag=1;

printf(\ fil[i].filelen,fil[i].year,fil[i].month,fil[i].day); } }}

int FCREATE(char *filename) /*创建文件*/

{

int i,flag=0,j,k=0,flag1=0,flag2=0,a; int n,m;

a=strlen(filename); if(a>10) return 1;

for(i=0;i

for(i=(sys1.fatblocknum+sys1.resblocknum+sys1.rootblocknum);i

flag++; if(flag==0)

{ printf(\磁盘已满\统计结果为0,则磁盘已满*/ return 0; }

printf(\空闲块数:%d\\n\ printf(\请输入文件长度:\

for(j=0;j<32;j++)

if(fil[j].firstblockaddr==0)

break; while(1)

{scanf(\输入目录项中文件的长度*/ n=(dir[j].filelen/BlockSize)+(dir[j].filelen%BlockSize?1:0); if(n<0||n>flag)/*文件长度小于0或大于空闲的空间 */ {printf(\文件太长!\\n\ printf(\请重新输入:\ } else break; }

for(i=(sys1.fatblocknum+sys1.resblocknum+sys1.rootblocknum);i

/*分配一块空间*/ if(fat1[i]==0) { fat1[i]=-1; break;}

dir[j].firstblockaddr=i+1;

strcpy(dir[j].filename,filename); /*输入文件相关的信息*/ dir[j].filename[a]='\\0'; printf(\输入年份:\ scanf(\ printf(\输入月份:\ scanf(\ printf(\输入日期:\ scanf(\ return (0); }

int FDELETE(char *filename) /*删除文件*/

{int i,j,k,n,flag=1; struct FCBBlock *p;

p=fcb;

while(p) /*查看是否关闭了文件*/ { if(strcmp(filename,fil[p->fdtblockindex].filename)==0) return 1; else

p=p->next; }

for(i=0;i

if(strcmp(filename,fil[i].filename)==0) { flag=1; break; } if(flag==0) return 2;

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

k=fat1[j-1]; /*将要删除的文件的块用0填充*/ 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); /*将要删除的文件的目录用0填充*/ return 0; }

int FOPEN(char *filename) /*打开文件 */ {

int i,j=0,k,flag=0,id; struct FCBBlock *p,*q,*r; p=fcb;

for(i=0;i

if(strcmp(filename,fil[i].filename)==0) { flag=1; break; } if(flag==0) return 0; if(fcb==NULL)

{ fcb=(struct FCBBlock *)malloc(sizeof(struct FCBBlock)); fcb->fileid=j+1; fcb->filepos=0; fcb->next=NULL; fcb->fdtblockindex=i; id=j+1; return id; } else { while(fcb) {j++;

if(strcmp(filename,fil[fcb->fdtblockindex].filename)==0) 打开*/

return 0; q=fcb; fcb=fcb->next; }

/*判断是否已经

r=(struct FCBBlock *)malloc(sizeof(struct FCBBlock)); /*创建fcb*/ r->fileid=j+1; r->filepos=0; r->next=NULL; r->fdtblockindex=i; q->next=r; } id=j+1; fcb=p;

return id; /*返回打开的文件的标识fileid*/ }

long FGETLEN(char *filename) /*获取文件的长度*/ { int i;

for(i=0;i

return -1; }

int FCLOSE(char *filename)/*关闭文件 */ { int flag=0;

struct FCBBlock *f,*p; f=fcb;

if(strcmp(filename,fil[fcb->fdtblockindex].filename)==0) { flag=1; fcb=fcb->next; p=fcb; while(p) {p->fileid-=1;


模拟实现单级目录的FAT文件系统(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:软件开发劳动计量方法与软件成本估算

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: