fdisk = new char[MEM_SIZE*sizeof(char)];//申请磁盘空间 //初始化FAT表 fat = (FAT)(fdisk + DISK_SIZE);//fat地址 fat[0].item = -1; fat[0].state = 1;//初始化FAT表 for (int i = 1; i < USER_ROOT_STARTBLOCK - 1; i++) { fat[i].item = i + 1;//指针 fat[i].state = 1; } fat[USER_ROOT_STARTBLOCK].item = -1; fat[USER_ROOT_STARTBLOCK].state = 1;//根目录磁盘块号 //fat其他块初始化 for (int i = USER_ROOT_STARTBLOCK + 1; i < DISK_NUM; i++) { fat[i].item = -1; fat[i].state = 0; } //根目录初始化 root = (struct direct*)(fdisk + DISK_SIZE + FATSIZE);//根目录地址 root->directItem[0].sign = 1; root->directItem[0].firstDisk = USER_ROOT_STARTBLOCK; strcpy(root->directItem[0].fileName , "."); root->directItem[0].next = root->directItem[0].firstDisk; root->directItem[0].type = 1; root->directItem[0].size = USER_ROOT_SIZE; //父目录初始化 root->directItem[1].sign = 1; root->directItem[1].firstDisk = USER_ROOT_STARTBLOCK; strcpy(root->directItem[1].fileName, ".."); root->directItem[1].next = root->directItem[0].firstDisk; root->directItem[1].type = 1; root->directItem[1].size = USER_ROOT_SIZE; //子目录初始化 for (int i = 2; i < MSD+2; i++) { root->directItem[i].sign = 0; root->directItem[i].firstDisk = -1; strcpy(root->directItem[i].fileName,""); root->directItem[i].next = -1; root->directItem[i].type = 0; root->directItem[i].size = 0; } if (!save())cout << "初始化失败!" << endl;作用
时间: 2024-04-24 12:22:51 浏览: 20
这段代码是用来初始化文件系统的。它包括以下几个步骤:
1. 分配磁盘空间;
2. 初始化FAT表,设置所有磁盘块的指针和状态;
3. 初始化根目录,包括"."和".."两个目录项,以及其他空闲目录项;
4. 最后将初始化后的文件系统保存到磁盘上。
这段代码的目的是为了让文件系统处于一个可用的状态,为用户提供文件管理服务。
相关问题
fat = (FAT)(fdisk + DISK_SIZE)
这段代码是将fdisk指针往后移动DISK_SIZE个字节,然后将移动后的地址转换为FAT类型的指针。fdisk指向的是模拟磁盘空间的char数组的首地址,而DISK_SIZE代表磁盘空间的大小,因此fdisk + DISK_SIZE的结果就是模拟磁盘空间的末尾地址。将这个地址转换成FAT类型的指针,就相当于将这个地址看作FAT表的首地址。这样,我们就可以通过FAT表来管理模拟磁盘空间中的文件了。
int item = curDir->directItem[cur].firstDisk;//目标文件的起始磁盘块号 while (fat[item].item != -1)item = fat[item].item;//计算保存该文件的最后一块盘块号 char* first = fdisk + item * DISK_SIZE + fSize % DISK_SIZE;//计算该文件的末地址
这段代码的作用是计算目标文件的末地址,具体操作如下:
首先,从目录项中获取目标文件的起始磁盘块号,赋值给变量item。
然后,利用while循环计算保存该文件的最后一块盘块号,即最后一块磁盘块的盘块号。具体操作和上一个问题中的解释一样,不再赘述。
接着,利用fSize%DISK_SIZE计算出目标文件在最后一块盘块中的偏移量,即该文件的末地址在最后一块盘块中的起始位置。
最后,根据最后一块盘块的盘块号和该文件在最后一块盘块中的偏移量,计算文件的末地址,即fdisk + item * DISK_SIZE + fSize % DISK_SIZE。
最终,该代码返回的是目标文件的末地址。