/* 原型声明: 功能描述: 输入:
dirname
指向新建目录的名字的指针
void my_mkdir(char *dirname)
创建子目录函数,在当前目录下创建名为dirname的目录
输出:无
函数功能实现算法描述: */
void my_mkdir(char *dirname) {
fcb *dirfcb,*pcbtmp; int rbn,i,fd;
unsigned short bknum; char text[MAX_TXT_SIZE],*p; time_t *now; struct tm *nowtime; /*
将当前的文件信息读到text中 rbn 是实际读取的字节数 */
openfilelist[curfd].count=0;
rbn = do_read(curfd,openfilelist[curfd].length,text); dirfcb=(fcb *)text; /*
检测是否有相同的目录名 */
for(i=0;i 分配一个空闲的打开文件表项 */ dirfcb=(fcb *)text; for(i=0;i if(strcmp(dirname,dirfcb->filename)==0) { } dirfcb++; printf(\eady exist!\\n\return -1; } if(strcmp(dirfcb->filename,\ break; dirfcb++; openfilelist[curfd].count=i*sizeof(fcb); fd=findFreeO(); if(fd<0) { } /* 寻找空闲盘块 */ bknum = findFree(); if(bknum == END ) { } pcbtmp=(fcb *)malloc(sizeof(fcb)); now=(time_t *)malloc(sizeof(time_t)); //在当前目录下新建目录项 pcbtmp->attribute=0x30; time(now); nowtime=localtime(now); pcbtmp->time=nowtime->tm_hour*2048+nowtime->tm_min*32+nowtime->tm_sec/2; pcbtmp->date=(nowtime->tm_year-80)*512+(nowtime->tm_mon+1)*32+nowtime->tm_mday; strcpy(pcbtmp->filename,dirname); strcpy(pcbtmp->exname,\ pcbtmp->first=bknum; pcbtmp->length=2*sizeof(fcb); openfilelist[fd].attribute=pcbtmp->attribute; openfilelist[fd].count=0; openfilelist[fd].date=pcbtmp->date; strcpy(openfilelist[fd].dir[fd],openfilelist[curfd].dir[curfd]); p=openfilelist[fd].dir[fd]; while(*p!='\\0') p++; return -1; return -1; strcpy(p,dirname); while(*p!='\\0') p++; *p='\\\\';p++; *p='\\0'; openfilelist[fd].dirno=openfilelist[curfd].first; openfilelist[fd].diroff=i; strcpy(openfilelist[fd].exname,pcbtmp->exname); strcpy(openfilelist[fd].filename,pcbtmp->filename); openfilelist[fd].fcbstate=1; openfilelist[fd].first=pcbtmp->first; openfilelist[fd].length=pcbtmp->length; openfilelist[fd].free=1; openfilelist[fd].time=pcbtmp->time; openfilelist[fd].topenfile=1; do_write(curfd,(char *)pcbtmp,sizeof(fcb),2); pcbtmp->attribute=0x28; time(now); nowtime=localtime(now); pcbtmp->time=nowtime->tm_hour*2048+nowtime->tm_min*32+nowtime->tm_sec/2; pcbtmp->date=(nowtime->tm_year-80)*512+(nowtime->tm_mon+1)*32+nowtime->tm_mday; strcpy(pcbtmp->filename,\ strcpy(pcbtmp->exname,\ pcbtmp->first=bknum; pcbtmp->length=2*sizeof(fcb); do_write(fd,(char *)pcbtmp,sizeof(fcb),2); pcbtmp->attribute=0x28; time(now); nowtime=localtime(now); pcbtmp->time=nowtime->tm_hour*2048+nowtime->tm_min*32+nowtime->tm_sec/2; pcbtmp->date=(nowtime->tm_year-80)*512+(nowtime->tm_mon+1)*32+nowtime->tm_mday; strcpy(pcbtmp->filename,\ strcpy(pcbtmp->exname,\ pcbtmp->first=openfilelist[curfd].first; pcbtmp->length=openfilelist[curfd].length; do_write(fd,(char *)pcbtmp,sizeof(fcb),2); openfilelist[curfd].count=0; do_read(curfd,openfilelist[curfd].length,text); pcbtmp=(fcb *)text; pcbtmp->length=openfilelist[curfd].length; my_close(fd); openfilelist[curfd].count=0; do_write(curfd,text,pcbtmp->length,2); } /**/ /* 原型声明: 功能描述: 输入: 输出: 函数功能实现算法描述: */ void my_ls() { fcb *fcbptr; int i; char text[MAX_TXT_SIZE]; unsigned short bknum; openfilelist[curfd].count=0; do_read(curfd,openfilelist[curfd].length,text); fcbptr=(fcb *)text; for(i=0;i<(int)(openfilelist[curfd].length/sizeof(fcb));i++) { if(fcbptr->filename[0]!='\\0') { if(fcbptr->attribute&0x20) { void my_ls() 显示目录函数 无 无 printf(\ &0x000f,(fcbptr->date)&0x001f,fcbptr->time>>11,(fcbptr->time>>5)&0x003f,fcbptr->time&0x001f*2); } else { printf(\ te)>>9)+1980,(fcbptr->date>>5)&0x000f,fcbptr->date&0x1f,fcbptr->time>>11,(fcbptr->time>>5)&0x3f,fcbptr->time&0x1f*2); } fcbptr++; } } openfilelist[curfd].count=0; } /**/ /* 原型声明: 功能描述: 输入: dirname 指向新建目录的名字的指针 void my_rmdir(char *dirname) 删除子目录函数 输出:无 函数功能实现算法描述: */ void my_rmdir(char *dirname) { int rbn,fd; char text[MAX_TXT_SIZE]; fcb *fcbptr,*fcbtmp,*fcbtmp2; unsigned short bknum; int i,j; fat *fat1,*fatptr; if(strcmp(dirname,\ { } fat1=(fat *)(myvhard+BLOCKSIZE); openfilelist[curfd].count=0; rbn=do_read(curfd,openfilelist[curfd].length,text); fcbptr=(fcb *)text; for(i=0;i if(i >= rbn/sizeof(fcb)) { printf(\if(strcmp(dirname,fcbptr->filename)==0) { } fcbptr++; break; printf(\return -1;

