解析扩展分区的数量
发布日期:2021-07-01 04:27:34 浏览次数:2 分类:技术文章

本文共 2276 字,大约阅读时间需要 7 分钟。

文章目录

1 解析扩展分区的数量

1.1 需求

怎么样在一个磁盘上划分超过4个分区呢?

在这里插入图片描述

1.2 实现原理

可以通过在扩展分区下任意划分多个逻辑分区,来突破主分区4个的限制。

在这里插入图片描述
扩展分区的各个逻辑分区,通过“链式”结构来连接。

在这里插入图片描述

1.3 代码实现

/** * 获取扩展分区下的子分区数量 * @param disk 扩展分区所在的存储设备 * @param start_sector 扩展分区所在的起始扇区 * @param count 查询得到的子分区数量 * @return */static xfat_err_t disk_get_extend_part_count(xdisk_t * disk, u32_t start_sector, u32_t * count) {
int r_count = 0; u8_t * disk_buffer = temp_buffer; u32_t ext_start_sector = start_sector; do {
mbr_part_t * part; // 读取扩展分区的mbr int err = xdisk_read_sector(disk, disk_buffer, start_sector, 1); if (err < 0) {
return err; } // 当前分区无效,立即退出 part = ((mbr_t *)disk_buffer)->part_info; if (part->system_id == FS_NOT_VALID) {
break; } r_count++; // 没有后续分区, 立即退出 if ((++part)->system_id != FS_EXTEND) {
break; } // 寻找下一分区 start_sector = ext_start_sector + part->relative_sectors; } while (1); *count = r_count; return FS_ERR_OK;}/** * 获取设备上总的分区数量 * @param disk 查询的存储设备 * @param count 分区数存储的位置 * @return */xfat_err_t xdisk_get_part_count(xdisk_t *disk, u32_t *count) {
int r_count = 0, i = 0; mbr_part_t * part; u8_t * disk_buffer = temp_buffer; u8_t extend_part_flag = 0; u32_t start_sector[4]; // 读取mbr区 int err = xdisk_read_sector(disk, disk_buffer, 0, 1); if (err < 0) {
return err; } // 解析统计主分区的数量,并标记出哪个分区是扩展分区 part = ((mbr_t *)disk_buffer)->part_info; for (i = 0; i < MBR_PRIMARY_PART_NR; i++, part++) {
if (part->system_id == FS_NOT_VALID) {
continue; } else if (part->system_id == FS_EXTEND) {
start_sector[i] = part->relative_sectors; extend_part_flag |= 1 << i; } else {
r_count++; } } // 统计各个扩展分区下有多少个子分区 if (extend_part_flag) {
for (i = 0; i < MBR_PRIMARY_PART_NR; i++) {
if (extend_part_flag & (1 << i)) {
u32_t ext_count = 0; err = disk_get_extend_part_count(disk, start_sector[i], &ext_count); if (err < 0) {
return err; } r_count += ext_count; } } } *count = r_count; return FS_ERR_OK;}

参考资料:

转载地址:https://muzimin.blog.csdn.net/article/details/105784922 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:登录功能和公聊功能的实现
下一篇:服务端程序的初步实现

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月25日 21时12分38秒