fat文件系统详解,fat16文件系统详解

  fat文件系统详解,fat16文件系统详解

  /* - /

  2012年FatFs-fatfilesystemmoduleinclucanvalr 0.09 a(C)ChaN年

  /- /

  /FatFsmoduleisagenericFATfilesystemmoduleforsmallembeddedsystems .

  /thisisaforesoftwaretableopenedforeducation,researchandcommercial

  /development sunderlicensepolicyofflowingterms .

  /版权所有(C)2012年,更改,保留所有权利。

  /* thefatfsmoduleisafreesoftwareandhereisnowarranty .

  /*无限制使用.您可以使用、修改和重新分配

  /您负责的个人、非营利或商业产品.

  /* redistrationsofsourcedemustreatintheopyrightnotice .

  /- */

  #ifndef_FATFS

  #define_FATFS4004/*版本IDRevisionID*/

  #ifdef__cplusplus

  外部C {

  #endif

  #includeinteger.h/*基本整数类型Basicintegertypes*/

  # include ff conf。h /* FATF配置选项FatFsconfigurationoptions*/

  #if_FATFS!=_FFCONF

  # errorWrongconfigurationfile(ff conf。h).

  #endif

  /*容量管理的定义定义sofvolumemanagement*/

  #if_MULTI_PARTITION/*多分区配置multiplepartitionconfiguration */

  数据类型说明结构{

  字节PD;/*物理驱动号Physicaldrivenumber*/

  字节pt;/*分区:0:自动检测,1-4:强制分区分区:0:自动检测,1-4:强制分区)*/

  }分区;

  extern PARTITIONVolToPart[];/*卷分区解析表卷分区分辨率表*/

  # defineLD2PD(vol)(VolToPart[vol]).pd)/*获取物理驱动号Getphysicaldrivenumber*/

  # defineLD2PT(vol)(VolToPart[vol]).pt)/*获取分区索引Getpartitionindex*/

  #else/*单分区配置单一分区配置*/

  #defineLD2PD(vol)(BYTE)(vol)/*每个逻辑驱动器都和一个物理驱动号对应eachlogicaldriveisboundtothemaphysicaldrivennumber */

  #defineLD2PT(vol)0/*始终安装在第一分区或者sfdalwaysmounts第一分区或SFD */

  #endif

  /*FatFsAPI路径名称字符串类型TypeofpathnamestringsonFatFsAPI */

  # if _ LFN _ UNICODE/* UNICODE string */

  #如果!使用长肥网络

  # error _ LFN _ unicode在非lfn CFG中必须是0 .

  #endif

  # TCHAR国际有限公司

  typedef WCHAR TCHAR;

  #define_T(x)L##x

  #define_TEXT(x)L##x

  #endif

  #else/*ANSI/OEM字符串ANSI/OEMstring*/

  # TCHAR国际有限公司

  typedef char TCHAR;

  #define_T(x)x

  #define_TEXT(x)x

  #endif

  #endif

  /*文件系统对象结构文件系统对象结构(金融行动任务组)*/

  数据类型说明结构{

  字节fs _ type/*脂肪子类型(0:没安装)FATsub类型(0:未安装)*/

  字节drv/*物理驱动器号Physicaldrivenumber*/

  字节csize/*每簇的扇区数Sectorspercluster(1,2,4.128)*/

  字节n _ fats/*文件配置表(胖)的副本数numberoftaccopies(1,2)*/

  字节wflag/*?win[]dirty标志(1:mustbewrittenback)*/

  字节fsi _ flag/*?fsinfodirtyflag(1:mustbewrittenback)*/

  单词id;/*文件系统安装IDFilesystemmountID*/

  WORD n _ rootdir/*根目录的数量numberofrootdirectoryentries(FAT12/16)*/

  #if_MAX_SS!=512

  WORD ssize/*每扇区字节字节数(512,1024,2048或4096)*/

  #endif

  #if_FS_REENTRANT

  _ SYNC _ tsobj/*同步对象标识符Identifierofsyncobject*/

  #endif

  #如果!_FS_READONLY

  DWORD last _ cluster/*最后分配的簇lastlocatedcluster */

  DWORD free _ cluster/*多余的簇数Numberoffreeclusters*/

  DWORD FSI _ sector/* fsinfosector(fat 32)*/

  #endif

  #如果文件系统路径

  DWORD cdir/*当前目录的起始簇(0根)Currentdirectorystartcluster(0:root)*/

  #endif

  DWORD n _ fatent/*文件配置表的数出席人数(=聚类数2)*/

  DWORD fsize/*扇区的文档配置表SectorsperFAT*/

  DWORD fatbase/*文档配置表开始的扇区FATstartsector*/

  DWORD dirbase/*根目录开始的扇区rootdirectorystartsector(fat 32:Cluster #)*/

  双字节值数据库;/*数据开始的扇区Datastartsector*/

  德沃德温塞特;/*当前扇区出现在win[]Currentsectorappearinginthewin[]*/

  BYTE win[_ MAX _ SS];/*目录的磁盘访问窗口,文件配置表(和小的稳频发电机(发生器)(恒定频率发生器的缩写)数据)DiskaccesswindowforDirectory,FAT(andDataontinycfg)*/

  } FATFS

  /*文件对象的结构Fileobjectstructure(FIL)*/

  数据类型说明结构{

  FATFS * fs/*对相关文件系统对象的指针pointertotherelatedfilesystemobject */

  单词id;/*相关的文件系统的文件系统挂载对象IDFilesystemmountIDoftherelatedfilesystemobject */

  字节标志;/*文件状态标志Filestatusflags*/

  字节pad1

  DWORD fptr/*文件的读/写指针文件读/写指针(0 edonfileopen)*/

  DWORD fsize/*文件大小文件大小*/

  DWORD sclust/*文件数据的起始簇filedatastartcluster(0:无数据群集,always0whenfsizeis0)*/

  双字组;/*文件读写指针的当前簇Currentclusteroffpter*/

  DWORD dsect/*文件读写的当前数据扇区currentdatasectorofpter */

  #如果!_FS_READONLY

  DWORD dir _ sect/*扇区包含的目录条目sectorcontainingthedirectoryentry */

  字节* dir _ ptr/*在窗口中的目录项的指针指针目录尝试窗口*/

  #endif

  #if_USE_FASTSEEK

  DWORD * cltbl/*链簇映射表指针指针群集链接映射表(nullonfileopen)*/

  #endif

  #if_FS_LOCK

  UINT lockid/*文件锁定IDFilelockID(indexoffilesemaphoretableFiles[])*/

  #endif

  #如果!_FS_TINY

  BYTE buf[_ MAX _ SS];/*文件数据读/写缓冲Filedataread/writebuffer*/

  #endif

  } FIL

  /*目录结构对象目录对象结构(DIR)*/

  数据类型说明结构{

  FATFS * fs/*主文件系统对象的指针pointertotheoownerfilesystemobject */

  单词id;/*主文件系统安装IDOwnerfilesystemmountID*/

  单词索引;/*当前读写索引数Currentread/writeindexnumber*/

  DWORD sclust/*表的起始簇Tablestartcluster(0:Rootdir)*/

  双字组;/*当前簇当前集群*/

  德沃德教派;/*当前扇区Currentsector*/

  字节*目录;/*当前单频网络指针在win[]pointertothercurrentsfentryinthewin[]*/

  字节* fn/*SFN的指针指针输入/输出fn {文件[8],扩展名[3],状态[1]}*/

  #如果使用长肥网络

  WCHAR * lfn/*LFN工作缓冲区指针PointertotheLFNworkingbuffer*/

  WORD lfn _ idx/*最后匹配的长肥网络索引数lastmatchedlfindex number(0x ffff:nol fn)*/

  #endif

  }目录

  /*文件状态结构文件状态结构(FILINFO)*/

  数据类型说明结构{

  DWORD fsize/*文件大小*/

  WORD fdate/*上次修改日期*/

  WORD ftime/*Lastmodifiedtime*/

  字节fat rib/*属性*/

  TCHAR fname[13];/*短文件名(8.3格式)*/

  #如果使用长肥网络

  TCHAR * lf名称;/*PointertotheLFNbuffer*/

  UINT lf size/* SizeofLFNbufferinTCHAR */

  #endif

  } FILINFO

  /*文件函数的返回代码filefunctionreturncode(FRESULT)*/

  数据类型说明枚举{

  FR_OK=0,/*(0)成功成功*/

  FR_DISK_ERR,/*(1)在低电平的磁盘输入-输出层发生硬件错误aharderroreancenthelowleveldiski/ol ayer */

  FR_INT_ERR,/*(2)使用错误断言失败*/

  FR_NOT_READY,/*(3)物理驱动器不工作physicaldrivecannotwork*/

  FR_NO_FILE,/*(4)找不到文件找不到文件*/

  FR_NO_PATH,/*(5)找不到路径找不到路径*/

  FR_INVALID_NAME,/*(6)路径名格式无效无效的路径名格式*/

  FR_DENIED,/*(7)访问拒绝由于禁止访问或者目录满accessdeniedduetoprohibited accessoritoryfull */

  FR_EXIST,/*(8)拒绝访问由于禁止访问禁止访问*/

  FR_INVALID_OBJECT,/*(9)文件/目录对象是无效的文件/目录对象无效*/

  FR_WRITE_PROTECTED,/*(10)物理驱动器写保护物理驱动是受保护的受保护*/

  FR_INVALID_DRIVE,/*(11)逻辑驱动器号无效logicaldrivenumberisinvalid*/

  FR_NOT_ENABLED,/*(12)卷没有工作空间thevolumehanworkarea */

  FR_NO_FILESYSTEM,/*(13)没有可用的卷有novalidFATvolume*/

  FR_MKFS_ABORTED,/*(14)f_mkfs()由于任何参数误差中止f _ mkfs()abortedduotoanyparameterror */

  FR_TIMEOUT,/*(15)不能获得授权在规定的时间内访问卷无法获得granttoaccessthevolumewithindefined period */

  FR_LOCKED,/*(16)操作被拒绝根据文件共享政策操作拒绝符合其他文件共享策略*/

  FR _不够_核心,/*(17)LFN无法分配工作缓冲区LFNworkingbuffercouldnotbeallocated */

  FR_TOO_MANY_OPEN_FILES,/*(18)打开文件数大于FS _ SHARE打开文件数FS _ SHARE */

  FR _无效_参数/*(19)给定的参数无效givenparameterinvalid */

  }结果

  /* - */

  /*发票模块应用程序接口fatfsmodulapplicationinterface */

  新鲜装载(字节fatfs *);/*安装/卸载一个逻辑驱动器挂载/卸载相关资讯*/

  fresh _ open(wire *、常量TCHAR *、byte);/*打开或创建一个文件Openorcreateafile*/

  freudef _ read(fil *、void *、UINT、UINT *);/*从文件中读取数据readdatafromafile

  freudef _ lsek(wire *、DWORD):/*改变一个文件对象文件指针movefilepointerofafileobject *。

  刀具_关闭(导线*);/*关闭打开的文件对象关闭打开的文件对象*/

  freudef _ opendir(dir *、const tchar *);/*打开一个已经存在的目录openanexistiningdirectory */

  freudef _ readdir(dir *、filinfo *);/*读一个目录项Readadirectoryitem*/

  freudef _ stat(const tchar *、filinfo *);/*获取文件状态getfilestatus */

  freudef _ write(fil *、const void *、UINT、UINT *);/*写数据到一个文件Writedatatoafile*/

  freudef _ getfree(const tchar *、DWORD *、fatfs * *);/*获取驱动器上的空闲簇数getnumberffreeclustersondrive */

  刀具_截断(导线*);/*截断文件Truncatefile*/

  新鲜同步(导线*);/*刷新正写入文件的缓存数据flushcacheddataofawritingfile

  freudef _ unlink *(注册乍得*);/*删除现有文件或目录deleteanexistiningfiledirdirect */

  freudef _ mkdir(const tchar *);/*创建新目录Createanewdirectory*/

  freudef _ chmod(const tchar *、BYTE、BYTE);/*改变文件/目录属性Changeattributeofthefile/dir*/

  freudef _ utime(const tchar *、const filinfo *);/*改变文件/目录的时间戳更改时间-tamfrehefile/dir */

  fresh _ rename(const tchar *、const tchar *);/*重命名/移动文件或目录重命名/移动辅助目录*/

  fresultf _ chdrive(字节):/*改变当前的驱动器Changecurrentdrive*/

  freudef _ chdir(const tchar *);/*改变当前目录Changecurrentdirectory*/

  freudef _ getcwd(tchar *、UINT):/*获取当前目录getcurrentdirectory */

  freudef _ forward(fil *、UINT (*)(常量字节*、UINT)、UINT、UINT *);/*向流发送数据forwarddatatothestream

  fresultf _ mkfs(字节、字节、UINT):/*创建一个驱动器上的文件系统createaflessystemonthedrive */

  fresultf _ fdisk(字节、const DWORD [],请参见*);/*将一个物理驱动器为若干分区dividephysicaldriveonly分区*/

  int f_putc(乍得,配线*);/*放一个字符在文件中putaccharertortorsfile */

  int f_puts(常量TCHAR *、导线*);/*放一组字符串在文件中putastorsfile */

  int f_printf(导线*、常量TCHAR *、-我.);/*将格式化后的字符串的文件putformtedstringtoffefile */

  tchar * f _ get(tchar *、int、wire *);/*从文件中获得字符串Getastringfromthefile*/

  # define ef _ eof(FP)(((FP)-fptr==(FP)-fsize)?1:0)

  # define ef _ error(FP)(((FP)-fa _ _ error旗标)?1:0)

  # define _ tell(FP)-fptr

  # define _ size(FP)-fsize

  #如果捍卫者

  # define of(-1)

  #endif

  /* - */

  /*额外的用户定义函数其他用户定义的函数*/

  /*RTC函数RTCfunction*/

  #如果!S7-1200可编程控制器

  S7-1200可编程控制器:

  #endif

  /*联合支持函数独特的支持功能*/

  # if _ use _ lfn/* unicode OEM码转换Unicode-OEMcodeconversion*/

  wchar ff _ convert(wchar uint);/* OEM unicode双向转换OEM-单向转换*/

  wchar ff _ w toupper(wchar);/*Unicode大写转换unicode大写转换*/

  #如果使用LFN==3/*内存函数内存函数*/

  S7-1200可编程控制器:/*分配内存块Allocatememoryblock*/

  页:1:/*空闲内存块Freememoryblock*/

  #endif

  #endif

  /*同步函数Syncfunctions*/

  #if _ fs _再入

  int ff_cre_syncobj(字节,_ sync _ t *);/*创建一个同步对象Createasyncobject*/

  int ff_req_grant(_SYNC_t):/*锁同步对象lockyncobject */

  请参阅ff_rel_grant(_SYNC_t):/*解锁同步对象解锁对象*/

  int ff _ del _ sync obj(_ sync _ t);/*D删除同步对象elektioncobject */

  #endif

  /* - */

  /*标志和偏移地址Flagsandoffsetaddress*/

  /*文件访问控制和文件状态标志fileaccesscontrolandfilestatusflags(fil。flag)*/

  #defineFA_READ0x01

  #defineFA_OPEN_EXISTING0x00

  #defineFA__ERROR0x80

  #如果!_FS_READONLY

  #defineFA_WRITE0x02

  #defineFA_CREATE_NEW0x04

  #defineFA_CREATE_ALWAYS0x08

  #defineFA_OPEN_ALWAYS0x10

  #defineFA__WRITTEN0x20

  #defineFA__DIRTY0x40

  #endif

  /*脂肪副类型FATsubtype(FATFS.fs_type)*/

  #defineFS_FAT121

  #defineFS_FAT162

  #defineFS_FAT323

  /*目录项的文件属性字节fileattributebitsfordirectoryentry */

  #defineAM_RDO0x01/*只读只读*/

  #defineAM_HID0x02/*隐藏隐藏*/

  #defineAM_SYS0x04/*系统系统*/

  #defineAM_VOL0x08/*卷标卷标签*/

  #defineAM_LFN0x0F/*LFN项LFNentry*/

  #defineAM_DIR0x10/*目录目录*/

  #defineAM_ARC0x20/*存档存档*/

  #defineAM_MASK0x3F/*掩码位Maskofdefinedbits*/

  /*快速查找功能Fastseekfeature*/

  # define create _ link map0x ffffffff

  /* - */

  /*多字节字访问宏多字节单词访问宏*/

  #if_WORD_ACCESS==1/*FAT结构使字访问EnablewordaccesstotheFATstructure */

  # defineLD _ WORD(ptr)(WORD)(*(WORD *)(BYTE *)(ptr))

  # defineLD _ DWORD(ptr)(DWORD)(*(DWORD *)(BYTE *)(ptr))

  #defineST_WORD(ptr,val)*(WORD *)(BYTE *)(ptr)=(WORD)(val)

  #defineST_DWORD(ptr,val)*(DWORD *)(BYTE *)(ptr)=(DWORD)(val)

  # else/*脂肪结构用位访问使用逐字节访问结构*/

  # defineLD _ WORD(ptr)(WORD)(((WORD)*((BYTE *)(ptr)1)8)(WORD)*(BYTE *)(ptr))

  # defineLD _ DWORD(ptr)(DWORD)(((DWORD)*((BYTE *)(ptr)3)24)((DWORD)*((BYTE *)(ptr)2)16)((WORD)*((BYTE *)(ptr)1)8) *(BYTE *)(ptr))

  #defineST_WORD(ptr,val)*(BYTE *)(ptr)=(BYTE)(val);*((BYTE *)(ptr)1)=(BYTE)((WORD)(val)8)

  #defineST_DWORD(ptr,val)*(BYTE *)(ptr)=(BYTE)(val);*((BYTE *)(ptr)1)=(BYTE)((WORD)(val)8);*((BYTE *)(ptr)2)=(BYTE)((DWORD)(val)16);*((BYTE *)(ptr)3)=(BYTE)((DWORD)(val)24)

  #endif

  #ifdef__cplusplus

  #endif

  #endif/*_FATFS*/

fat文件系统详解,fat16文件系统详解