free(now); fclose(fp); } /**/ /* 原型声明: 功能描述: 输入: 输出:
函数功能实现算法描述: */
void my_exitsys() {
FILE *fp; fcb *rootfcb;
char text[MAX_TXT_SIZE]; while(curfd)
curfd=my_close(curfd);
void my_exitsys() 退出文件系统 无 无
if(openfilelist[curfd].fcbstate) { }
fp=fopen(filename,\\ fwrite(myvhard,SIZE,1,fp); free(myvhard); fclose(fp); } /* 原型声明: 功能描述:
int do_read(int fd,int len,char *text)
实际读文件函数,读出指定文件中从指定指针开始的长度 为len的内容到用户空间的text中
openfilelist[curfd].count=0;
do_read(curfd,openfilelist[curfd].length,text); rootfcb=(char *)text;
rootfcb->length=openfilelist[curfd].length; openfilelist[curfd].count=0;
do_write(curfd,text,openfilelist[curfd].length,2);
输入: 输出:
实际读出的字节数 函数功能实现算法描述: */
int do_read(int fd,int len,char *text) {
unsigned char *buf; unsigned short bknum; int off,i,lentmp; unsigned char *bkptr; char *txtmp,*p; fat *fat1,*fatptr;
fat1=(fat *)(myvhard+BLOCKSIZE); lentmp = len; txtmp=text; /*
申请1024B空间作为缓冲区buffer */
buf=(unsigned char *)malloc(1024); if(buf==NULL) { }
off = openfilelist[fd].count; bknum = openfilelist[fd].first; fatptr = fat1+bknum; while(off >= BLOCKSIZE) { }
off=off-BLOCKSIZE; bknum=fatptr->id; fatptr=fat1+bknum; if(bknum == END) { }
printf(\return -1; printf(\return -1; fd len
open()函数的返回值,文件的描述符 要求从文件中读出的字节数
text 指向存放读出数据的用户区地址
bkptr=(unsigned char *)(myvhard+bknum*BLOCKSIZE); //strncpy(buf,bkptr,BLOCKSIZE); for(i=0;i while(len > 0) { if(BLOCKSIZE-off > len) { } else { //strncpy(txtmp,buf+off,BLOCKSIZE-off); //len=len-(BLOCKSIZE-off); //openfilelist[fd].count+=(BLOCKSIZE-off); for(p=buf+off;p //txtmp+=(BLOCKSIZE-off); bknum =fatptr->id; fatptr = fat1+bknum; bkptr=(unsigned char *)(myvhard+bknum*BLOCKSIZE); //strncpy(buf,bkptr,BLOCKSIZE); for(i=0;i buf[i]=bkptr[i]; *txtmp=*p; len--; openfilelist[fd].count++; //strncpy(txtmp,buf+off,len); //len=len-len; //openfilelist[fd].count+=len; //off+=len; for(p=buf+off;len>0;p++,txtmp++) { } *txtmp=*p; len--; off++; openfilelist[fd].count++; buf[i]=bkptr[i]; } } } free(buf); return lentmp-len; } /**/ /* 原型声明: 功能描述: 输入: fd len 打开文件的id 要读出字符的个数 返回实际读的字符的个数 int my_read(int fd,int len) 读文件函数 输出: 函数功能实现算法描述: */ int my_read(int fd,int len) { char text[MAX_TXT_SIZE]; if(fd > MAX_OPEN_FILE) { } openfilelist[curfd].count=0; if(do_read(fd,len,text)>0) { } else { } return len; } /**/ /* printf(\return -1; text[len]='\\0'; printf(\ printf(\return -1; 原型声明: 功能描述: 输入: fd int do_write(int fd,char *text,int len,char wstyle) 实际写文件函数 当前打开的文件的id text 指向要写入的内容的指针 len 本次要写入字节数 wstyle写方式 实际写入的字节数 输出: 函数功能实现算法描述: */ int do_write(int fd,char *text,int len,char wstyle) { unsigned char *buf; unsigned short bknum; int off,tmplen=0,tmplen2=0,i,rwptr; unsigned char *bkptr,*p; char *txtmp,flag=0; fat *fat1,*fatptr; fat1=(fat *)(myvhard+BLOCKSIZE); txtmp=text; /* 申请临时1024B的buffer */ buf=(unsigned char *)malloc(BLOCKSIZE); if(buf==NULL) { } rwptr = off = openfilelist[fd].count; bknum = openfilelist[fd].first; fatptr=fat1+bknum; while(off >= BLOCKSIZE ) { off=off-BLOCKSIZE; bknum=fatptr->id; if(bknum == END) { bknum=fatptr->id=findFree(); if(bknum==END) return -1; fatptr=fat1+bknum; printf(\return -1;

