{ 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;