}
}
fatptr->id=END;
fatptr=fat1+bknum;
fatptr->id=END;
bkptr=(unsigned char *)(myvhard+bknum*BLOCKSIZE); while(tmplen for(p=buf+off;p *p=*txtmp; tmplen++; txtmp++; off++; if(tmplen==len) break; for(i=0;i buf[i]=0; //if(off) //{ //} //else //{ //} //for(i=0;i buf[i]=0; for(i=0;i buf[i]=bkptr[i]; tmplen2++; if(tmplen2==openfilelist[curfd].length) break; /*if((*p)==NULL) { }*/ break; } free(buf); if(openfilelist[fd].count>openfilelist[fd].length) { } openfilelist[fd].fcbstate=1; return tmplen; } /**/ /* 原型声明: 功能描述: 输入: 输出: 函数功能实现算法描述: */ unsigned short findFree() { unsigned short i; fat *fat1,*fatptr; unsigned short findFree() 寻找下一个空闲盘块 无 返回空闲盘块的id openfilelist[fd].length=openfilelist[fd].count; for(i=0;i openfilelist[fd].count=rwptr+tmplen; if(off>=BLOCKSIZE) { } off=off-BLOCKSIZE; bknum=fatptr->id; if(bknum==END) { } fatptr=fat1+bknum; bkptr=(unsigned char *)(myvhard+bknum*BLOCKSIZE); bknum=fatptr->id=findFree(); if(bknum==END) return -1; fatptr=fat1+bknum; fatptr->id=END; bkptr[i]=buf[i]; fat1=(fat *)(myvhard+BLOCKSIZE); for(i=6; i printf(\ return END; } /* 原型声明: 功能描述: 输入: 输出: 函数功能实现算法描述: */ int findFreeO() { int i; for(i=0;i printf(\ return -1; } /**/ /* 原型声明: 功能描述: 输入: fd 打开文件的id 返回实际写的长度 int my_write(int fd) 写文件函数 if(openfilelist[i].free==0) { } return i; int findFreeO() 寻找空闲文件表项 无 返回空闲文件表项的id fatptr=fat1+i; if(fatptr->id == FREE) { } return i; 输出: 函数功能实现算法描述: */ int my_write(int fd) { int wstyle=0,wlen=0; fat *fat1,*fatptr; unsigned short bknum; unsigned char *bkptr; char text[MAX_TXT_SIZE]; fat1=(fat *)(myvhard+BLOCKSIZE); if(fd>MAX_OPEN_FILE) { } while(wstyle<1||wstyle>3) { printf(\ite style:\\n1.cut write\\t2.cover write\\t3.add write\\n\scanf(\getchar(); switch(wstyle) { case 1://截断写 { } bknum=openfilelist[fd].first; fatptr=fat1+bknum; while(fatptr->id!=END) { } fatptr->id=FREE; bknum=openfilelist[fd].first; fatptr=fat1+bknum; fatptr->id=END; openfilelist[fd].length=0; openfilelist[fd].count=0; break; bknum=fatptr->id; fatptr->id=FREE; fatptr=fat1+bknum; printf(\return -1; case 2://覆盖写 { openfilelist[fd].count=0; } } break; case 3://追加写 { } bknum=openfilelist[fd].first; fatptr=fat1+bknum; openfilelist[fd].count=0; while(fatptr->id!=END) { } bkptr=(unsigned char *)(myvhard+bknum*BLOCKSIZE); while(*bkptr !=0) { } break; bkptr++; openfilelist[fd].count++; bknum=fatptr->id; fatptr=fat1+bknum; openfilelist[fd].count+=BLOCKSIZE; default: } break; printf(\ gets(text); if(do_write(fd,text,strlen(text),wstyle)>0) { } else { } if(openfilelist[fd].count>openfilelist[fd].length) { } openfilelist[fd].fcbstate=1; return wlen; } openfilelist[fd].length=openfilelist[fd].count; return -1; wlen+=strlen(text);

