| | | | 否 | 否 | | | :--: | :--: | :--: | :--: | :--: | ---- | **实现了哪些功能(已实现,并且测试正确的打勾)** [√] 打印当前目录下所有文件和目录名,类似于ls简易版 [√] 打印文件/目录的文件控制块 [√] 打印整个文件分配表 [√] 切换目录,类似于cd功能 [√] 创建文件、删除文件 [√] 创建目录、删除文件 #### 2.ls简易版 ##### 2.1 实现思路及伪代码 实现思路:使用`opendir`函数打开指定的路径,如果路径无效或者无法访问,`opendir`会返回NULL,此时打印错误信息并结束函数。然后使用`readdir`函数循环读取目录中的每一个条目,`readdir`函数在读取到目录末尾时会返回NULL,因此可以用它来控制循环的结束。在读取条目的过程中,如果条目的名称不是".“或”…“,就将其打印出来,”.“和”…"在Unix系统中分别代表当前目录和父目录,通常在列出目录内容时会被忽略。 ``` 定义函数 ls(path: 字符串) ### 操作系统实验——实现FAT12文件系统的关键知识点 #### 1. FAT12文件系统的概述 FAT12文件系统是一种较早的文件系统格式,主要用于较小的存储设备,如软盘等。其主要特点在于使用12位(即1.5字节)的簇号来表示文件分配表中的链表。由于每个簇号占用12位,FAT12文件系统最多可以支持\(2^{12} - 2 = 4094\)个簇(减去两个用于标记未使用的簇和坏簇的值)。这意味着在每簇大小为512字节的情况下,该文件系统最大可以支持大约2MB的存储空间。 #### 2. 实现的功能及技术细节 - **打印当前目录下所有文件和目录名** - **实现思路**:利用标准库函数`opendir`和`readdir`。`opendir`函数用于打开一个目录流,若成功则返回一个非空的DIR结构体指针;`readdir`函数则用于读取目录流中的目录项。 - **伪代码**: ```c void ls(const char *path) { DIR *d; struct dirent *dir; d = opendir(path); if (d == NULL) { perror("opendir"); return; } printf("内容如下:\n"); while ((dir = readdir(d)) != NULL) { if (strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0) continue; printf("%s\n", dir->d_name); } closedir(d); } ``` - **技术细节**:避免打印`.`和`..`这两个特殊目录,因为它们分别代表当前目录和父目录,通常在列出目录内容时被忽略。 - **打印文件/目录的文件控制块** - **实现思路**:读取磁盘上的文件控制块(FCB)信息,这些信息包含了文件的基本属性。 - **伪代码**: ```c void print_FCB(struct root_dir_entry *root_dir, const char *disk, int offset, int root_ent_cnt) { int fd = open(disk, O_RDONLY); if (fd < 0) { perror("无法打开磁盘文件"); return; } for (offset; offset <= offset + 32 * (root_ent_cnt - 1); offset += 32) { pread(fd, root_dir, sizeof(struct root_dir_entry), offset); if (root_dir->name[0] == 0xE5) continue; if (root_dir->name[0] == 0x00) break; printf("名称:"); for (int i = 0; i < 8; i++) printf("%c", root_dir->name[i]); printf("\n扩展名:"); // 打印扩展名 printf("\n属性:"); for (int i = 7; i >= 0; i--) { if ((root_dir->attributes & (1 << i)) != 0) printf("%d", 1); else printf("%d", 0); } printf("\n"); // 其他字段的打印 } close(fd); } ``` - **技术细节**:文件控制块中的属性字段通常采用位字段的方式表示不同的属性标志,例如是否为只读、是否隐藏等。通过位操作来获取各个属性。 - **打印整个文件分配表** - **实现思路**:遍历文件分配表中的每一项,并打印出每个簇的状态。 - **技术细节**:FAT12文件系统中的每个簇号使用12位表示,需要考虑如何正确地读取和解释这些簇号。 - **切换目录** - **实现思路**:通过改变当前工作目录来实现类似`cd`命令的功能。 - **技术细节**:使用`chdir`函数可以更改当前工作目录,但需要注意权限问题。 - **创建文件、删除文件** - **实现思路**:利用系统调用`open`和`unlink`来实现。 - **技术细节**:`open`函数可以用于创建新文件,而`unlink`函数则用于删除已存在的文件。 - **创建目录、删除文件** - **实现思路**:使用`mkdir`和`rmdir`函数。 - **技术细节**:`mkdir`用于创建目录,`rmdir`用于删除空目录。注意`rmdir`只能删除空目录,如果要删除非空目录,则需要先删除目录中的所有文件和子目录。 #### 3. 测试过程及案例设计 - **测试用例**:设计多种测试场景,包括但不限于: - 测试空目录的情况。 - 测试含有多个文件和子目录的目录。 - 测试包含特殊文件名(如含有空格、特殊符号等)的文件或目录。 - 测试文件或目录的创建、删除操作。 - **测试结果**:根据预期输出与实际输出的一致性来评估功能的正确性。 本实验不仅涵盖了基本的文件系统操作,还深入探讨了FAT12文件系统的工作原理及其实现细节,对于理解计算机操作系统底层机制具有重要意义。
2025-05-27 15:03:27 26KB 操作系统
1
【图书馆管理系统软件系统报告】 本报告详述了一个由9人团队协作完成的软件工程入门实验——图书馆管理系统的设计与实现过程。这个项目不仅提供了实践经验,也展现了软件工程的基本原则和方法。 一、概述 图书馆管理系统旨在为图书馆提供自动化管理服务,包括书籍的借阅、归还、续借、预约,以及读者信息管理等功能。系统应具备用户友好的界面,方便图书馆工作人员进行日常操作,并确保数据的安全性和准确性。此外,系统需支持多用户同时操作,避免数据冲突,以提高工作效率。 二、可行性分析 1、需求分析:在项目启动前,团队对图书馆的实际需求进行了深入调研,确定了系统的核心功能,如书籍数据库管理、读者账户管理、借阅规则设置等。同时,也考虑到了扩展性需求,如支持电子资源的管理和服务评价功能。 2、可行性分析:技术上,团队评估了现有的开发工具和技术栈,如使用Java或Python作为后端语言,结合SQL数据库存储数据,前端采用HTML、CSS和JavaScript实现交互。考虑到团队成员的技术背景,这些选择是完全可行的。 3、系统特点:该图书馆管理系统将具有易于使用的界面,强大的搜索功能,以及完善的权限管理机制,确保不同角色(管理员、普通读者)拥有不同的操作权限。 4、可能存在的风险:项目风险主要包括技术难题、时间延误和人员流动。团队需要制定应对策略以降低这些风险。 三、开发计划 1、时间要求:项目计划在预定的时间内完成,如3个月内,分为需求分析、设计、编码、测试和部署等多个阶段。 2、人员分配:团队成员根据技能和兴趣被分配到不同的角色,如项目经理、系统分析师、程序员、测试员等。表1展示了具体的分工,而甘特图则清晰地描绘了项目的进度和依赖关系。 3、产品及阶段成果:每个阶段都将有明确的产出,如需求文档、设计图纸、代码实现、测试报告等,确保项目按计划推进。 4、风险管理:团队制定了全面的风险管理策略,包括技术风险(如技术难题的解决)、时间风险(如通过合理调度确保进度)和人员风险(如通过培训和激励保持团队稳定性)。 在整个过程中,团队遵循软件工程的迭代和敏捷开发原则,不断反馈、调整,确保图书馆管理系统的质量和效率。通过这个项目,团队成员不仅锻炼了编程能力,更深入了解了软件开发的完整流程,为今后的软件工程实践打下了坚实的基础。
2025-04-20 18:14:48 6.06MB 软件工程报告
1
使用超声波进行距离检测,STM32作为主控,LCD1602进行显示,含声光报警
2023-11-22 14:36:06 2.32MB 课程设计
1
C语言程序设计之交通处罚单管理系统报告内含代码.doc
2023-08-08 17:45:24 787KB 计算机
1
这是一篇关于仓库管理信息系统的数据库课程设计报告。内容比较详细
2023-05-12 21:13:48 979KB 仓库管理系统
1
开发一个比较完善的基于JavaWeb的网络爬虫系统,简单来说,就是一个可以从指定网站爬取数据的系统,通过启动客户端,可以实现以下功能: 1、爬取数据: 本次爬取数据的来源BOSS直聘,在职位输入框里面输入你想要查询的岗位,然后点击开始爬取即可;那么爬取下来的数据放在SqlServer数据库里面; 2、查询数据: 点击查询数据按钮,可以查询出来之前爬取的所有数据; 3、搜索功能: 根据上面的输入框,查询对应的数据 根据公司名称查询 根据职位查询 根据薪资查询 根据经验查询 根据学历查询 根据地址查询 4、添加公司: 我们在黑名单公司输入公司名,然后点击添加公司,那么这个公司就会添加到黑名单里面,爬取数据不会包含黑名单的公司; 开发工具:SqlServe 、Intellij IDEA
2023-04-11 15:42:50 1.4MB 范文/模板/素材
1
数据库工资管理系统报告和代码大全样本.doc
1
数据库课程设计图书管理系统报告.doc
1
随着现代医疗的崛起,高科技发展的生态进化,一大部分的优秀的软件涌现出来,为医疗行业极大提高质与量的卓越贡献。
1
这是一个软件需求分析报告。
2023-03-02 16:50:11 286KB 图书 报告 系统 软件工程
1