Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • P proj5-FAT32onMaQueOS
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • CrewUnionProblemKill
  • proj5-FAT32onMaQueOS
  • Wiki
  • 系统调用文档
  • sys_mount 函数介绍

sys_mount 函数介绍 · Changes

Page history
Update sys_mount 函数介绍 authored Jun 15, 2024 by Little Leaf's avatar Little Leaf
Hide whitespace changes
Inline Side-by-side
系统调用文档/sys_mount-函数介绍.md
View page @ 9fbe3e09
...@@ -44,4 +44,86 @@ int sys_mount() ...@@ -44,4 +44,86 @@ int sys_mount()
return 0; return 0;
} }
``` ```
\ No newline at end of file
这段代码实现了一个函数 `sys_mount()`,用于挂载 FAT32 文件系统。下面是对代码的逐步解释:
### 1. 函数头部与声明
```c
int sys_mount()
```
- `sys_mount()` 是一个返回整数值的函数,通常返回 0 表示成功,-1 表示失败。
### 2. 读取引导分区数据
```c
uint32_t N = fat32_read_N();
struct fat_boot_sector *boot_sector_data = fat32_read_boot_sector(N);
if (boot_sector_data == NULL)
{
// 处理错误
fprintf(stderr, "Failed to read boot sector.\n");
return -1;
}
```
- `fat32_read_N()` 读取引导分区编号或引导扇区的某些数据(假设是必要的数据读取操作)。
- `fat32_read_boot_sector(N)` 读取引导扇区数据并返回一个指向 `fat_boot_sector` 结构体的指针。
- 如果读取失败(`boot_sector_data` 为 `NULL`),则打印错误信息并返回 -1 表示失败。
### 3. 从引导分区读取 BPB(BIOS 参数块)
```c
struct fat_bios_param_block *bpb = fat32_read_bpb(boot_sector_data);
if (bpb == NULL)
{
// 处理错误
fprintf(stderr, "Failed to read BPB.\n");
free(boot_sector_data);
return -1;
}
```
- `fat32_read_bpb(boot_sector_data)` 从引导扇区数据中读取 BIOS 参数块 (BPB) 并返回一个指向 `fat_bios_param_block` 结构体的指针。
- 如果读取失败(`bpb` 为 `NULL`),则打印错误信息、释放先前分配的引导扇区数据内存,并返回 -1 表示失败。
### 4. 将 FAT(文件分配表)读入内存
```c
uint32_t *fat = fat32_read_fat(bpb, file_allocation_table);
if (fat == NULL)
{
// 处理错误
fprintf(stderr, "Failed to read FAT.\n");
free(boot_sector_data);
free(bpb);
return -1;
}
```
- `fat32_read_fat(bpb, file_allocation_table)` 根据 BPB 读取文件分配表 (FAT) 并返回一个指向 FAT 的指针。
- 如果读取失败(`fat` 为 `NULL`),则打印错误信息、释放先前分配的内存(引导扇区数据和 BPB),并返回 -1 表示失败。
### 5. 将根目录读入内存
```c
fat32_read_root_dir(fat, bpb);
```
- `fat32_read_root_dir(fat, bpb)` 根据 FAT 和 BPB 读取根目录到内存中。此函数没有返回值,因此假设它能够成功执行或在内部处理错误。
### 6. 清理分配的内存
```c
free(boot_sector_data);
free(bpb);
free(fat);
```
- 挂载操作完成后,释放之前分配的内存,以避免内存泄漏。
### 7. 返回成功状态
```c
return 0;
```
- 如果整个操作成功,返回 0 表示挂载成功。
### 总结
这个函数执行了一系列操作来挂载 FAT32 文件系统。主要步骤包括读取引导扇区数据、读取 BPB、将 FAT 读入内存、读取根目录并将其读入内存。整个过程中,有错误处理逻辑来应对每个关键步骤的失败,并在失败时释放已分配的内存资源。
\ No newline at end of file
Clone repository
  • Home
  • uploads
    • 0bc768dbb7fc0582616552f906240a99
      • Readme
  • 云端开发环境
  • 文档规范
  • 比赛题目分析和相关资料调研
  • 系统测试
  • 系统调用文档
    • sys_create函数
    • sys_destroy 函数介绍
      • find_directory_entry 函数介绍
        • read_custor 函数介绍
    • sys_mount 函数介绍