摘要:3.6应用层函数接口FAT文件系统向应用层设计了如下几个初级程序接口:GetFilelnfo(UINT8*FInfo,FileInfo*TempFilelnfo)(获取文件信息),OutPut_RootFileinfo(void)(输出根目录文件信息),DirOr(UINT8FileAttrib)(判断目录),GetNextCluster(UINTl6TempCluster)(获取下一文件簇信息),OutPutFileCluster(UINTl6TempS
FAT文件系统向应用层设计了如下几个初级程序接口:Get Filelnfo(UINT8*F Info,FileInfo*TempFilelnfo)(获取文件信息),OutPut _RootFileinfo(void)(输出根目录文件信息),DirOr(UINT8 FileAttrib)(判断目录),Get Next Cluster(UINTl6 TempCluster)(获取下一文件簇信息),OutPutFileCluster(UINTl6 TempStart Cluster)(输出文件簇地址),OutPutFile(UINTl6 Temp StartCluster)(输出文件内容),ShowClusterContent(UINTl6 TempCluster)(输出簇内容)。通过这些初级程序接口实现了OpenDir(UINTl6 TempStartCluster)(目录打开),FileDelete(文件删除),FileDataRead(文件数据读取),FileCreate(UINTl6 TempStartCluster,UINT32TempFileLength)(文件创建)等功能。
3.6.1 目录读取及文件信息获取
FAT文件系统的具体文件和目录项都是通过读取ROOT目录来进行查找的,所以FAT的文件排布是以树形的结构排布。对于FAT来说,目录项与文件项在同一目录中是同样占32个字节的属性项。研究中使用了1个数据结构Filelnfo来存储文件信息,并通过if(Temp_F_Info[0x0b]&0x l0)来分辨文件与目录。
在FAT文件系统中,文件是以簇的形式保存在SD卡中的,簇的排布是不连续的,1个文件如果大于1个簇的话,则要通过FAT表来查找该文件所有簇所在的位置,从而找到整个文件。目录一般只占有1个簇的大小,在FAT表中等同于小于1个簇的小文件,值显示为FF。
目录是以文件的形式存储在父目录中的,目录中的文件信息记录了该文件的起始簇以及文件的大小,知道了文件的起始簇,通过FAT表中的信息可以很方便地找到文件的下一个簇的位置,并由文件的大小判断出文件的结束位置。
3.6.2 文件的读写
在FAT文件系统中,读取文件只需要知道该文件的起始簇以及大小便可以很方便地得到整个文件的信息。读取步骤是:获取根目录信息,通过根目录信息找到下一层目录所在簇位置,通过下一层目录信息递归找到文件所在目录,读取文件信息属性,得到文件的起始簇位置和文件大小,通过FAT表递归查找到文件的全部簇地址,最终以FF结尾;根据文件大小判断文件的结束位置,最后输出整个文件。
文件的创建和写入则是通过FAT表查找未被使用的空簇(值为00),写满1簇之后再查找下一未被使用的空簇,并同时更新FAT1表和FAT2表。然后在文件所被创建的目录信息中添加文件信息,最终实现文件的创建。
通信工程师备考资料免费领取
去领取