fat = (FAT)(fdisk + DISK_SIZE)
时间: 2023-10-19 10:05:32 浏览: 39
这段代码是将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。
最终,该代码返回的是目标文件的末地址。
for (j = 0; j < needDisk; j++) { for (i = USER_ROOT_STARTBLOCK + 1; i < DISK_NUM; i++) if (fat[i].state == 0) break; if (i >= DISK_NUM) { cout << "磁盘已被分配完!" << endl; return; } first = fdisk + i * DISK_SIZE;//空闲磁盘起始盘物理地址 //当写到最后一块磁盘,则只写剩余部分内容 if (j == needDisk - 1) { for (int k = 0; k < size - (DISK_SIZE - fSize % DISK_SIZE - j * DISK_SIZE); k++) first[k] = content[k]; } else { for (int k = 0; k < DISK_SIZE; k++) first[k] = content[k]; } //修改文件分配表内容 fat[item].item = i; fat[i].state = 1; fat[i].item = -1; }
这段代码的作用是将文件内容写入分配的磁盘块中。具体操作如下:
首先,通过一个外层循环,需要写入的磁盘块数为needDisk。循环次数就是需要写入的磁盘块数。
然后,通过一个内层循环,在所有磁盘块中找到第一个状态为0(即未分配)的磁盘块,并将其分配给文件使用。具体操作和上一个问题中的解释一样,不再赘述。分配后,获取该磁盘块的起始地址,即first = fdisk + i * DISK_SIZE。
接着,判断是否为最后一个磁盘块。如果是,则只写入剩余的部分内容,即size - (DISK_SIZE - fSize % DISK_SIZE - j * DISK_SIZE)。具体操作是,通过一个循环将剩余的内容逐个写入该磁盘块中。如果不是最后一个磁盘块,则将整个磁盘块中的内容全部写入。
然后,修改文件分配表中的信息。将当前磁盘块的盘块号记录在上一个磁盘块对应的项中,即fat[item].item = i;将当前磁盘块的状态设置为已分配,即fat[i].state = 1;将当前磁盘块对应的项设置为-1,表示该磁盘块是该文件的最后一个磁盘块,即fat[i].item = -1。
最终,该代码完成了文件内容的写入操作,将文件内容逐块写入已分配的磁盘块中。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)