//创建目录初始化 curDir->directItem[i].sign = 0; curDir->directItem[i].firstDisk = j; strcpy(curDir->directItem[i].fileName, fName); curDir->directItem[i].next = j; curDir->directItem[i].type = 1; curDir->directItem[i].size = USER_ROOT_SIZE; direct* cur_mkdir = (direct*)(fdisk + curDir->directItem[i].firstDisk * DISK_SIZE);//创建目录的物理地址

时间: 2024-04-23 15:22:42 浏览: 16
这段代码是在创建一个新目录时进行的初始化工作。具体来说,它做了以下几件事情: 1. 将当前目录下的一个空闲目录项的 sign 值置为 0,表示该目录项已经被占用。 2. 将当前目录下的一个空闲目录项的 firstDisk 值设置为新目录的起始磁盘号 j。 3. 将当前目录下的一个空闲目录项的 fileName 值设置为新目录的名称 fName。 4. 将当前目录下的一个空闲目录项的 next 值设置为新目录的起始磁盘号 j。 5. 将当前目录下的一个空闲目录项的 type 值设置为 1,表示该目录项是一个目录。 6. 将当前目录下的一个空闲目录项的 size 值设置为 USER_ROOT_SIZE,表示该目录的大小为 USER_ROOT_SIZE 个字节。 最后,根据新目录的起始磁盘号 j,计算出该目录的物理地址 cur_mkdir。
相关问题

//指向当前目录的目录项 cur_mkdir->directItem[0].sign = 0; cur_mkdir->directItem[0].firstDisk = curDir->directItem[i].firstDisk; strcpy(cur_mkdir->directItem[0].fileName, "."); cur_mkdir->directItem[0].next = cur_mkdir->directItem[0].firstDisk; cur_mkdir->directItem[0].type = 1; cur_mkdir->directItem[0].size = USER_ROOT_SIZE;

这段代码是在创建一个新目录时,设置该目录的 "." 目录项的信息。具体来说,它做了以下几件事情: 1. 将新目录的第一个目录项(即 "." 目录项)的 sign 值置为 0,表示该目录项已经被占用。 2. 将新目录的第一个目录项(即 "." 目录项)的 firstDisk 值设置为该目录的起始磁盘号。 3. 将新目录的第一个目录项(即 "." 目录项)的 fileName 值设置为 ".",表示该目录是自身的父目录。 4. 将新目录的第一个目录项(即 "." 目录项)的 next 值设置为该目录的起始磁盘号。 5. 将新目录的第一个目录项(即 "." 目录项)的 type 值设置为 1,表示该目录项是一个目录。 6. 将新目录的第一个目录项(即 "." 目录项)的 size 值设置为 USER_ROOT_SIZE,表示该目录的大小为 USER_ROOT_SIZE 个字节。 这样就完成了新目录的初始化工作,并且设置了该目录的 "." 目录项的信息。

//指向上一级目录的目录项 cur_mkdir->directItem[1].sign = curDir->directItem[0].sign; cur_mkdir->directItem[1].firstDisk = curDir->directItem[0].firstDisk; strcpy(cur_mkdir->directItem[1].fileName, ".."); cur_mkdir->directItem[1].next = cur_mkdir->directItem[1].firstDisk; cur_mkdir->directItem[1].type = 1; cur_mkdir->directItem[1].size = USER_ROOT_SIZE;

这段代码是在创建一个新目录时,设置该目录的 ".." 目录项的信息。具体来说,它做了以下几件事情: 1. 将新目录的第二个目录项(即 ".." 目录项)的 sign 值设置为当前目录的第一个目录项(即 "." 目录项)的 sign 值,表示该目录项已经被占用。 2. 将新目录的第二个目录项(即 ".." 目录项)的 firstDisk 值设置为当前目录的第一个目录项(即 "." 目录项)的 firstDisk 值,即为当前目录的起始磁盘号。 3. 将新目录的第二个目录项(即 ".." 目录项)的 fileName 值设置为 "..",表示该目录是上一级目录。 4. 将新目录的第二个目录项(即 ".." 目录项)的 next 值设置为该目录的起始磁盘号。 5. 将新目录的第二个目录项(即 ".." 目录项)的 type 值设置为 1,表示该目录项是一个目录。 6. 将新目录的第二个目录项(即 ".." 目录项)的 size 值设置为 USER_ROOT_SIZE,表示该目录的大小为 USER_ROOT_SIZE 个字节。 这样就完成了新目录的初始化工作,并且设置了该目录的 ".." 目录项的信息。

相关推荐

void write(string* str,char *content,int size) { char fName[20];strcpy_s(fName, str[1].c_str()); //在当前目录下查找目标文件 int i, j; for (i = 2; i < MSD + 2; i++) if (!strcmp(curDir->directItem[i].fileName, fName) && curDir->directItem[i].type == 0) break; if (i >= MSD + 2) { cout << "找不到该文件!" << endl; return; } int cur = i;//当前目录项的下标 int fSize = curDir->directItem[cur].size;//目标文件大小 int item = curDir->directItem[cur].firstDisk;//目标文件的起始磁盘块号 while (fat[item].item != -1)item = fat[item].item;//计算保存该文件的最后一块盘块号 char* first = fdisk + item * DISK_SIZE + fSize % DISK_SIZE;//计算该文件的末地址 //如果盘块剩余部分够写,则直接写入剩余部分 if (DISK_SIZE - fSize % DISK_SIZE > size) { strcpy_s(first, content); curDir->directItem[cur].size += size; } //如果盘块剩余部分不够写,则找到空闲磁盘块写入 else { //先将起始磁盘剩余部分写完 for (j = 0; j < DISK_SIZE - fSize % DISK_SIZE; j++) { first[j] = content[j]; } int res_size = size - (DISK_SIZE - fSize % DISK_SIZE);//剩余要写的内容大小 int needDisk = res_size / DISK_SIZE;//占据的磁盘块数量 int needRes = res_size % DISK_SIZE;//占据最后一块磁盘块的大小 if (needDisk > 0)needRes += 1; 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; } curDir->directItem[cur].size += size; } }

最新推荐

recommend-type

ExcelVBA程序设计.doc

29.编写过程来初始化窗体 211 30.编写过程填充列表框控件 213 31.编写过程控制选项按钮 213 32.编写过程同步文字框和旋转按钮 214 33.编写过程关闭用户窗体 214 34.转移窗体数据到工作表 215 35.使用INFO SURVEY应用...
recommend-type

Python优秀项目 基于Flask+Markdown实现的生成app官方网站源码+部署文档+数据资料.zip

CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 Python优秀项目 基于Flask+Markdown实现的生成app官方网站源码+部署文档+数据资料.zip 1、代码压缩包内容 代码的项目文件 部署文档文件 2、代码运行版本 python3.7或者3.7以上的版本;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细) 3、运行操作步骤 步骤一:将代码的项目目录使用IDEA打开(IDEA要配置好python环境) 步骤二:根据部署文档或运行提示安装项目所需的库 步骤三:IDEA点击运行,等待程序服务启动完成 4、python资讯 如需要其他python项目的定制服务,可后台私信博主(注明你的项目需求) 4.1 python或人工智能项目辅导 4.2 python或人工智能程序定制 4.3 python科研合作 Django、Flask、Pytorch、Scrapy、PyQt、爬虫、可视化、大数据、推荐系统、人工智能、大模型
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

深入了解MATLAB开根号的最新研究和应用:获取开根号领域的最新动态

![matlab开根号](https://www.mathworks.com/discovery/image-segmentation/_jcr_content/mainParsys3/discoverysubsection_1185333930/mainParsys3/image_copy.adapt.full.medium.jpg/1712813808277.jpg) # 1. MATLAB开根号的理论基础 开根号运算在数学和科学计算中无处不在。在MATLAB中,开根号可以通过多种函数实现,包括`sqrt()`和`nthroot()`。`sqrt()`函数用于计算正实数的平方根,而`nt
recommend-type

react的函数组件的使用

React 的函数组件是一种简单的组件类型,用于定义无状态或者只读组件。 它们通常接受一个 props 对象作为参数并返回一个 React 元素。 函数组件的优点是代码简洁、易于测试和重用,并且它们使 React 应用程序的性能更加出色。 您可以使用函数组件来呈现简单的 UI 组件,例如按钮、菜单、标签或其他部件。 您还可以将它们与 React 中的其他组件类型(如类组件或 Hooks)结合使用,以实现更复杂的 UI 交互和功能。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

解决MATLAB开根号常见问题:提供开根号运算的解决方案

![解决MATLAB开根号常见问题:提供开根号运算的解决方案](https://img-blog.csdnimg.cn/d939d1781acc404d8c826e8af207e68f.png) # 1. MATLAB开根号运算基础** MATLAB开根号运算用于计算一个数的平方根。其语法为: ``` y = sqrt(x) ``` 其中: * `x`:要开根号的数或数组 * `y`:开根号的结果 开根号运算的输入可以是实数、复数、矩阵或数组。对于实数,开根号运算返回一个非负实数。对于复数,开根号运算返回一个复数。对于矩阵或数组,开根号运算逐元素执行,对每个元素进行开根号运算。 #
recommend-type

inputstream

Inputstream是Java中用于从输入流中读取数据的抽象类,它是Java I/O类库中的一部分。Inputstream提供了read()和read(byte[] b)等方法,可以从输入流中读取一个字节或一组字节。在Java中,FileInputStream、ByteArrayInputStream和StringBufferInputStream都是Inputstream的子类,用于读取不同类型的输入流。