Fatfs 文件系统剖析(2)

本文深入分析了Fatfs文件系统中的关键结构体,包括FATFS、FIL、DIR等,并介绍了move_window、clust2sect等核心函数的功能。文章旨在梳理Fatfs文件系统内部联系,为后续实践调试打下基础。
摘要由CSDN通过智能技术生成

今天来分析下ff.h和ff.c两个文件。

 

先来分析ff.h中定义的几个结构体:

typedef struct {
 BYTE fs_type;   //  系统类型,为0时系统没有被挂载

 BYTE drv;          //  物理磁盘驱动号

 BYTE csize;       //  每簇的扇区数目,  簇是文件数据分配的基本单位   

 BYTE n_fats;     //  文件分配表的数目,一般为两个(一个备份fat表)     

          //Fatfs文件系统应该是:引导扇区,文件分配表2个,根目录区,和数据区
     
 BYTE wflag;      //  文件活动窗体是否改动标志,为1要回写 

 BYTE fsi_flag;   //  文件信息回写标志 

 WORD id;         //  文件系统加载id号 

 WORD n_rootdir;     //根目录区目录项数目(针对FAT12/16,FAT32不使用) 

#if _MAX_SS != 512
 WORD ssize;     //  每扇区多少字节
#endif

#if _FS_REENTRANT
 _SYNC_t sobj;   // 允许重入,则定义同步对象 

#endif

#if !_FS_READONLY
 DWORD last_clust;  // 最新分配的簇  

 DWORD free_clust;  // 空闲簇
 DWORD fsi_sector;  // 文件信息扇区(仅用于FAT32)
#endif

#if _FS_RPATH
 DWORD cdir;  //使用相对路径,文件系统的当前起始路径  0(root 路径)

#endif

 DWORD n_fatent; //文件分配表占用的扇区    n_fatent=数据簇数目+2

 DWORD fsize;       //每FAT表有多少个扇区      

 DWORD fatbase;  //文件分配表开始扇区    

 DWORD dirbase;  // 如果是FAT32,根目录开始扇区需要首先得到 

 DWORD database; // 数据起始扇区    

 DWORD winsect;    // win中当前指定的扇区
 BYTE win[_MAX_SS];  //扇区操作缓存

} FATFS;

typedef struct {
 FATFS* fs;    // 指向的文件系统 

 WORD id;     // 自身文件系统挂载id号  即 fs->id

 BYTE flag;     // 文件状态 

 BYTE pad1;   //文件在簇里面扇区偏移 (0--fs->csize)

 DWORD fptr; //文件当前读写指针位置,当文件打开时为0 

 DWORD fsize; //文件大小(按字

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值