//子目录初始化 for(int i = 2; i < MSD + 2; i++) { cur_mkdir->directItem[i].sign = 0; cur_mkdir->directItem[i].firstDisk = -1; strcpy(cur_mkdir->directItem[i].fileName, ""); cur_mkdir->directItem[i].next = -1; cur_mkdir->directItem[i].type = 0; cur_mkdir->directItem[i].size = 0; }
时间: 2024-04-23 08:22:30 浏览: 13
这段代码是在为一个新建立的子目录进行初始化工作。具体来说,它做了以下几件事情:
1. 遍历该子目录的所有目录项,从第 2 个目录项(即 "." 和 ".." 目录项之后)开始,到第 MSD+2 个目录项结束(MSD 代表最大子目录数),对每个目录项进行初始化。
2. 将每个目录项的 sign 值置为 0,表示该目录项未被占用。
3. 将每个目录项的 firstDisk 值设置为 -1,表示该目录项对应的文件或目录未分配磁盘块。
4. 将每个目录项的 fileName 值设置为空字符串,表示该目录项未命名。
5. 将每个目录项的 next 值设置为 -1,表示该目录项不属于任何文件或目录的链表。
6. 将每个目录项的 type 值设置为 0,表示该目录项既不是文件也不是目录。
7. 将每个目录项的 size 值设置为 0,表示该目录项对应的文件或目录大小为 0 字节。
这样就完成了该子目录的初始化工作,其中每个目录项都是空闲的、未被占用的状态。
相关问题
for(i=2;i<MSD+2;i++) { cur_mkdir->directItem[i].sign=0; cur_mkdir->directItem[i].firstDisk=-1; strcpy(cur_mkdir->directItem[i].name,""); cur_mkdir->directItem[i].next=-1; cur_mkdir->directItem[i].type=0; cur_mkdir->directItem[i].size=0; }
这段代码是在对目录项进行循环赋值操作。具体来说,该目录项有 MSD 个空间,其中前两个空间已经被分别用于存储 `.` 和 `..` 两个目录项,而剩余的空间需要进行初始化。下面是代码的解释:
- `for(i=2;i<MSD+2;i++)`:循环遍历该目录项中除了前两个空间以外的所有空间,即从下标 2 到下标 MSD+1。
- `cur_mkdir->directItem[i].sign=0;`:将该目录项中第 `i` 个空间的标志位 `sign` 设为 0,表示该空间当前没有被使用。
- `cur_mkdir->directItem[i].firstDisk=-1;`:将该目录项中第 `i` 个空间的 `firstDisk` 字段设为 -1,表示该空间对应的文件(或子目录)在磁盘上不存在。
- `strcpy(cur_mkdir->directItem[i].name,"");`:将该目录项中第 `i` 个空间的 `name` 字段设为空字符串,表示该空间对应的文件(或子目录)没有名称。
- `cur_mkdir->directItem[i].next=-1;`:将该目录项中第 `i` 个空间的 `next` 字段设为 -1,表示该空间对应的文件(或子目录)没有下一个磁盘块。
- `cur_mkdir->directItem[i].type=0;`:将该目录项中第 `i` 个空间的 `type` 字段设为 0,表示该空间对应的文件(或子目录)不存在。
- `cur_mkdir->directItem[i].size=0;`:将该目录项中第 `i` 个空间的 `size` 字段设为 0,表示该空间对应的文件(或子目录)大小为 0。
需要注意的是,循环的起始下标是 2 而不是 0,因为前两个空间已经被使用。另外,循环的终止下标是 MSD+2 而不是 MSD+1,因为需要将第 MSD+1 个空间也进行初始化。
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;作用
这段代码是用来初始化文件系统的。它包括以下几个步骤:
1. 分配磁盘空间;
2. 初始化FAT表,设置所有磁盘块的指针和状态;
3. 初始化根目录,包括"."和".."两个目录项,以及其他空闲目录项;
4. 最后将初始化后的文件系统保存到磁盘上。
这段代码的目的是为了让文件系统处于一个可用的状态,为用户提供文件管理服务。