void main(void) { unsigned long numSectors; /* init interrupts */ initInterrupts(); /* check disk ready */ if (!checkDiskReady()) { error("disk not ready"); } /* determine disk size */ numSectors = getDiskSize(); printf("Disk has %lu (0x%lX) sectors.\n", numSectors, numSectors); if (numSectors < 32) { error("disk is too small"); } /* copy boot block to write buffer */ copyBootBlock(); /* write boot block to disk */ printf("Writing boot block to disk...\n"); if (!writeDisk(0, 32, wrBuf)) { error("cannot write boot block to disk"); } /* done */ printf("Halting...\n"); }
void writeDiskSector(char *data, FILE *f) { int pos; printf("Track:%d, Sector:%d Pos:%06x written\n", track*2+(sectrk > 15), (sectrk > 15 ? sectrk - 16 : sectrk)+1, pos = getSectorLocation(track, sectrk*2)); writeDisk(data, pos, 256, f); if (++sectrk >= 32) { sectrk = 0; track++; } }
int mkDir(MyDisk * disk,DirBlock * curBlock,short curBlockp,char * dirName) { short pi,pb,i=0; DirBlock *newDirBlock; pi=getAvailableInode(disk); pb=getAvailabeBlock(disk); if(!pi||!pb)//创建目录失败 return 0; //在curDirBlock中加入新的inode指针,指向inodeTable中的位置 while(curBlock->inodeID[i]) { if(!strcmp(dirName,curBlock->fileName[i]))//已存在同名文件 { printf("已存在同名文件,无法新建!\n"); return 0; } i++; } curBlock->inodeID[i]=pi; strcpy(curBlock->fileName[i],dirName); writeDisk(curBlock,BLOCK_SIZE,1,sizeof(MyDisk)+curBlockp*BLOCK_SIZE); //为新的目录分配一个inode和DirBlock disk->superB.freeBlocks--; disk->superB.freeInodes--; disk->inodeUsedMap[pi]=1; disk->inodeTable[pi].blockPoint[0]=pb; disk->inodeTable[pi].fileType=2; disk->blockUsedMap[pb]=1; newDirBlock=(DirBlock *)malloc(sizeof(DirBlock)); memset(newDirBlock,0,sizeof(DirBlock)); writeDisk(newDirBlock,BLOCK_SIZE,1,sizeof(MyDisk)+pb*BLOCK_SIZE); return 1; }