文件系统FatFsR0.09a翻译(三):ff.h

摘要:
//本译文仅供学习,未经作者许可,不得用于任何其他目的//翻译:晓峰//修订日期:2013/03/19//版本:V1.0//保留所有权利。海盗行为必须受到起诉。

//本译文只供学习使用,未经作者许可,不得用于其它任何用途

//译者:xiaofeng

//修改日期:2013/03/19

//版本:V1.0

//版权所有,盗版必究。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
/*---------------------------------------------------------------------------/
/FatFs-FATfilesystemmoduleincludefileR0.09a(C)ChaN,2012
/----------------------------------------------------------------------------/
/FatFsmoduleisagenericFATfilesystemmoduleforsmallembeddedsystems.
/Thisisafreesoftwarethatopenedforeducation,researchandcommercial
/developmentsunderlicensepolicyoffollowingterms.
/
/Copyright(C)2012,ChaN,allrightreserved.
/
/*TheFatFsmoduleisafreesoftwareandthereisNOWARRANTY.
/*Norestrictiononuse.Youcanuse,modifyandredistributeitfor
/personal,non-profitorcommercialproductUNDERYOURRESPONSIBILITY.
/*Redistributionsofsourcecodemustretaintheabovecopyrightnotice.
/
/----------------------------------------------------------------------------*/
#ifndef_FATFS
#define_FATFS4004/*版本IDRevisionID*/
#ifdef__cplusplus
extern"C"{
#endif
#include"integer.h"/*基本整数类型Basicintegertypes*/
#include"ffconf.h"/*FatFs配置选项FatFsconfigurationoptions*/
#if_FATFS!=_FFCONF
#errorWrongconfigurationfile(ffconf.h).
#endif
/*容量管理的定义Definitionsofvolumemanagement*/
#if_MULTI_PARTITION/*多分区配置Multiplepartitionconfiguration*/
typedefstruct{
BYTEpd;/*物理驱动号Physicaldrivenumber*/
BYTEpt;/*分区:0:自动检测,1-4:强制分区Partition:0:Autodetect,1-4:Forcedpartition)*/
}PARTITION;
externPARTITIONVolToPart[];/*卷分区解析表Volume-Partitionresolutiontable*/
#defineLD2PD(vol)(VolToPart[vol].pd)/*获取物理驱动号Getphysicaldrivenumber*/
#defineLD2PT(vol)(VolToPart[vol].pt)/*获取分区索引Getpartitionindex*/
#else/*单分区配置Singlepartitionconfiguration*/
#defineLD2PD(vol)(BYTE)(vol)/*每个逻辑驱动器都和一个物理驱动号对应Eachlogicaldriveisboundtothesamephysicaldrivenumber*/
#defineLD2PT(vol)0/*始终安装在第一分区或者SFDAlwaysmountsthe1stpartitionorinSFD*/
#endif
/*FatFsAPI路径名称字符串类型TypeofpathnamestringsonFatFsAPI*/
#if_LFN_UNICODE/*Unicodestring*/
#if!_USE_LFN
#error_LFN_UNICODEmustbe0innon-LFNcfg.
#endif
#ifndef_INC_TCHAR
typedefWCHARTCHAR;
#define_T(x)L##x
#define_TEXT(x)L##x
#endif
#else/*ANSI/OEM字符串ANSI/OEMstring*/
#ifndef_INC_TCHAR
typedefcharTCHAR;
#define_T(x)x
#define_TEXT(x)x
#endif
#endif
/*文件系统对象结构Filesystemobjectstructure(FATFS)*/
typedefstruct{
BYTEfs_type;/*FAT子类型(0:没安装)FATsub-type(0:Notmounted)*/
BYTEdrv;/*物理驱动器号Physicaldrivenumber*/
BYTEcsize;/*每簇的扇区数Sectorspercluster(1,2,4...128)*/
BYTEn_fats;/*文件配置表(FAT)的副本数NumberofFATcopies(1,2)*/
BYTEwflag;/*??win[]dirtyflag(1:mustbewrittenback)*/
BYTEfsi_flag;/*??fsinfodirtyflag(1:mustbewrittenback)*/
WORDid;/*文件系统安装IDFilesystemmountID*/
WORDn_rootdir;/*根目录的数量Numberofrootdirectoryentries(FAT12/16)*/
#if_MAX_SS!=512
WORDssize;/*每扇区字节Bytespersector(512,1024,2048or4096)*/
#endif
#if_FS_REENTRANT
_SYNC_tsobj;/*同步对象标识符Identifierofsyncobject*/
#endif
#if!_FS_READONLY
DWORDlast_clust;/*最后分配的簇Lastallocatedcluster*/
DWORDfree_clust;/*多余的簇数Numberoffreeclusters*/
DWORDfsi_sector;/*fsinfosector(FAT32)*/
#endif
#if_FS_RPATH
DWORDcdir;/*当前目录的起始簇(0根)Currentdirectorystartcluster(0:root)*/
#endif
DWORDn_fatent;/*文件配置表的数NumberofFATentries(=numberofclusters+2)*/
DWORDfsize;/*扇区的文档配置表SectorsperFAT*/
DWORDfatbase;/*文档配置表开始的扇区FATstartsector*/
DWORDdirbase;/*根目录开始的扇区Rootdirectorystartsector(FAT32:Cluster#)*/
DWORDdatabase;/*数据开始的扇区Datastartsector*/
DWORDwinsect;/*当前扇区出现在win[]Currentsectorappearinginthewin[]*/
BYTEwin[_MAX_SS];/*目录的磁盘访问窗口,文件配置表(和小的CFG数据)DiskaccesswindowforDirectory,FAT(andDataontinycfg)*/
}FATFS;
/*文件对象的结构Fileobjectstructure(FIL)*/
typedefstruct{
FATFS*fs;/*对相关文件系统对象的指针Pointertotherelatedfilesystemobject*/
WORDid;/*相关的文件系统的文件系统挂载对象IDFilesystemmountIDoftherelatedfilesystemobject*/
BYTEflag;/*文件状态标志Filestatusflags*/
BYTEpad1;
DWORDfptr;/*文件的读/写指针Fileread/writepointer(0edonfileopen)*/
DWORDfsize;/*文件大小Filesize*/
DWORDsclust;/*文件数据的起始簇Filedatastartcluster(0:nodatacluster,always0whenfsizeis0)*/
DWORDclust;/*文件读写指针的当前簇Currentclusteroffpter*/
DWORDdsect;/*文件读写的当前数据扇区Currentdatasectoroffpter*/
#if!_FS_READONLY
DWORDdir_sect;/*扇区包含的目录条目Sectorcontainingthedirectoryentry*/
BYTE*dir_ptr;/*在窗口中的目录项的指针Pointertothedirectoryentryinthewindow*/
#endif
#if_USE_FASTSEEK
DWORD*cltbl;/*链簇映射表指针Pointertotheclusterlinkmaptable(nullonfileopen)*/
#endif
#if_FS_LOCK
UINTlockid;/*文件锁定IDFilelockID(indexoffilesemaphoretableFiles[])*/
#endif
#if!_FS_TINY
BYTEbuf[_MAX_SS];/*文件数据读/写缓冲Filedataread/writebuffer*/
#endif
}FIL;
/*目录结构对象Directoryobjectstructure(DIR)*/
typedefstruct{
FATFS*fs;/*主文件系统对象的指针Pointertotheownerfilesystemobject*/
WORDid;/*主文件系统安装IDOwnerfilesystemmountID*/
WORDindex;/*当前读写索引数Currentread/writeindexnumber*/
DWORDsclust;/*表的起始簇Tablestartcluster(0:Rootdir)*/
DWORDclust;/*当前簇Currentcluster*/
DWORDsect;/*当前扇区Currentsector*/
BYTE*dir;/*当前SFN指针在win[]PointertothecurrentSFNentryinthewin[]*/
BYTE*fn;/*SFN的指针PointertotheSFN(in/out){file[8],ext[3],status[1]}*/
#if_USE_LFN
WCHAR*lfn;/*LFN工作缓冲区指针PointertotheLFNworkingbuffer*/
WORDlfn_idx;/*最后匹配的LFN索引数LastmatchedLFNindexnumber(0xFFFF:NoLFN)*/
#endif
}DIR;
/*文件状态结构Filestatusstructure(FILINFO)*/
typedefstruct{
DWORDfsize;/*Filesize*/
WORDfdate;/*Lastmodifieddate*/
WORDftime;/*Lastmodifiedtime*/
BYTEfattrib;/*Attribute*/
TCHARfname[13];/*Shortfilename(8.3format)*/
#if_USE_LFN
TCHAR*lfname;/*PointertotheLFNbuffer*/
UINTlfsize;/*SizeofLFNbufferinTCHAR*/
#endif
}FILINFO;
/*文件函数的返回代码Filefunctionreturncode(FRESULT)*/
typedefenum{
FR_OK=0,/*(0)成功Succeeded*/
FR_DISK_ERR,/*(1)在低电平的磁盘I/O层发生硬件错误AharderroroccurredinthelowleveldiskI/Olayer*/
FR_INT_ERR,/*(2)使用错误Assertionfailed*/
FR_NOT_READY,/*(3)物理驱动器不工作Thephysicaldrivecannotwork*/
FR_NO_FILE,/*(4)找不到文件Couldnotfindthefile*/
FR_NO_PATH,/*(5)找不到路径Couldnotfindthepath*/
FR_INVALID_NAME,/*(6)路径名格式无效Thepathnameformatisinvalid*/
FR_DENIED,/*(7)访问拒绝由于禁止访问或者目录满Accessdeniedduetoprohibitedaccessordirectoryfull*/
FR_EXIST,/*(8)拒绝访问由于禁止访问Accessdeniedduetoprohibitedaccess*/
FR_INVALID_OBJECT,/*(9)文件/目录对象是无效的Thefile/directoryobjectisinvalid*/
FR_WRITE_PROTECTED,/*(10)物理驱动器写保护Thephysicaldriveiswriteprotected*/
FR_INVALID_DRIVE,/*(11)逻辑驱动器号无效Thelogicaldrivenumberisinvalid*/
FR_NOT_ENABLED,/*(12)卷没有工作空间Thevolumehasnoworkarea*/
FR_NO_FILESYSTEM,/*(13)没有可用的卷ThereisnovalidFATvolume*/
FR_MKFS_ABORTED,/*(14)f_mkfs()由于任何参数误差中止Thef_mkfs()abortedduetoanyparametererror*/
FR_TIMEOUT,/*(15)不能获得授权在规定的时间内访问卷Couldnotgetagranttoaccessthevolumewithindefinedperiod*/
FR_LOCKED,/*(16)操作被拒绝根据文件共享政策Theoperationisrejectedaccordingtothefilesharingpolicy*/
FR_NOT_ENOUGH_CORE,/*(17)LFN无法分配工作缓冲区LFNworkingbuffercouldnotbeallocated*/
FR_TOO_MANY_OPEN_FILES,/*(18)打开文件数大于FS_SHARENumberofopenfiles>_FS_SHARE*/
FR_INVALID_PARAMETER/*(19)给定的参数无效Givenparameterisinvalid*/
}FRESULT;
/*--------------------------------------------------------------*/
/*FatFs模块应用程序接口FatFsmoduleapplicationinterface*/
FRESULTf_mount(BYTE,FATFS*);/*安装/卸载一个逻辑驱动器Mount/Unmountalogicaldrive*/
FRESULTf_open(FIL*,constTCHAR*,BYTE);/*打开或创建一个文件Openorcreateafile*/
FRESULTf_read(FIL*,void*,UINT,UINT*);/*从文件中读取数据Readdatafromafile*/
FRESULTf_lseek(FIL*,DWORD);/*改变一个文件对象文件指针Movefilepointerofafileobject*/
FRESULTf_close(FIL*);/*关闭打开的文件对象Closeanopenfileobject*/
FRESULTf_opendir(DIR*,constTCHAR*);/*打开一个已经存在的目录Openanexistingdirectory*/
FRESULTf_readdir(DIR*,FILINFO*);/*读一个目录项Readadirectoryitem*/
FRESULTf_stat(constTCHAR*,FILINFO*);/*获取文件状态Getfilestatus*/
FRESULTf_write(FIL*,constvoid*,UINT,UINT*);/*写数据到一个文件Writedatatoafile*/
FRESULTf_getfree(constTCHAR*,DWORD*,FATFS**);/*获取驱动器上的空闲簇数Getnumberoffreeclustersonthedrive*/
FRESULTf_truncate(FIL*);/*截断文件Truncatefile*/
FRESULTf_sync(FIL*);/*刷新正写入文件的缓存数据Flushcacheddataofawritingfile*/
FRESULTf_unlink(constTCHAR*);/*删除现有文件或目录Deleteanexistingfileordirectory*/
FRESULTf_mkdir(constTCHAR*);/*创建新目录Createanewdirectory*/
FRESULTf_chmod(constTCHAR*,BYTE,BYTE);/*改变文件/目录属性Changeattributeofthefile/dir*/
FRESULTf_utime(constTCHAR*,constFILINFO*);/*改变文件/目录的时间戳Changetimes-tampofthefile/dir*/
FRESULTf_rename(constTCHAR*,constTCHAR*);/*重命名/移动文件或目录Rename/Moveafileordirectory*/
FRESULTf_chdrive(BYTE);/*改变当前的驱动器Changecurrentdrive*/
FRESULTf_chdir(constTCHAR*);/*改变当前目录Changecurrentdirectory*/
FRESULTf_getcwd(TCHAR*,UINT);/*获取当前目录Getcurrentdirectory*/
FRESULTf_forward(FIL*,UINT(*)(constBYTE*,UINT),UINT,UINT*);/*向流发送数据Forwarddatatothestream*/
FRESULTf_mkfs(BYTE,BYTE,UINT);/*创建一个驱动器上的文件系统Createafilesystemonthedrive*/
FRESULTf_fdisk(BYTE,constDWORD[],void*);/*将一个物理驱动器为若干分区Divideaphysicaldriveintosomepartitions*/
intf_putc(TCHAR,FIL*);/*放一个字符在文件中Putacharactertothefile*/
intf_puts(constTCHAR*,FIL*);/*放一组字符串在文件中Putastringtothefile*/
intf_printf(FIL*,constTCHAR*,...);/*将格式化后的字符串的文件Putaformattedstringtothefile*/
TCHAR*f_gets(TCHAR*,int,FIL*);/*从文件中获得字符串Getastringfromthefile*/
#definef_eof(fp)(((fp)->fptr==(fp)->fsize)?1:0)
#definef_error(fp)(((fp)->flag&FA__ERROR)?1:0)
#definef_tell(fp)((fp)->fptr)
#definef_size(fp)((fp)->fsize)
#ifndefEOF
#defineEOF(-1)
#endif
/*--------------------------------------------------------------*/
/*额外的用户定义函数Additionaluserdefinedfunctions*/
/*RTC函数RTCfunction*/
#if!_FS_READONLY
DWORDget_fattime(void);
#endif
/*Union支持函数Unicodesupportfunctions*/
#if_USE_LFN/*Unicode-OEM码转换Unicode-OEMcodeconversion*/
WCHARff_convert(WCHAR,UINT);/*OEM-Unicode双向转换OEM-Unicodebidirectionalconversion*/
WCHARff_wtoupper(WCHAR);/*Unicode大写转换Unicodeupper-caseconversion*/
#if_USE_LFN==3/*内存函数Memoryfunctions*/
void*ff_memalloc(UINT);/*分配内存块Allocatememoryblock*/
voidff_memfree(void*);/*空闲内存块Freememoryblock*/
#endif
#endif
/*同步函数Syncfunctions*/
#if_FS_REENTRANT
intff_cre_syncobj(BYTE,_SYNC_t*);/*创建一个同步对象Createasyncobject*/
intff_req_grant(_SYNC_t);/*锁同步对象Locksyncobject*/
voidff_rel_grant(_SYNC_t);/*解锁同步对象Unlocksyncobject*/
intff_del_syncobj(_SYNC_t);/*D删除同步对象eleteasyncobject*/
#endif
/*--------------------------------------------------------------*/
/*标志和偏移地址Flagsandoffsetaddress*/
/*文件访问控制和文件状态标志Fileaccesscontrolandfilestatusflags(FIL.flag)*/
#defineFA_READ0x01
#defineFA_OPEN_EXISTING0x00
#defineFA__ERROR0x80
#if!_FS_READONLY
#defineFA_WRITE0x02
#defineFA_CREATE_NEW0x04
#defineFA_CREATE_ALWAYS0x08
#defineFA_OPEN_ALWAYS0x10
#defineFA__WRITTEN0x20
#defineFA__DIRTY0x40
#endif
/*FAT副类型FATsubtype(FATFS.fs_type)*/
#defineFS_FAT121
#defineFS_FAT162
#defineFS_FAT323
/*目录项的文件属性字节Fileattributebitsfordirectoryentry*/
#defineAM_RDO0x01/*只读Readonly*/
#defineAM_HID0x02/*隐藏Hidden*/
#defineAM_SYS0x04/*系统System*/
#defineAM_VOL0x08/*卷标Volumelabel*/
#defineAM_LFN0x0F/*LFN项LFNentry*/
#defineAM_DIR0x10/*目录Directory*/
#defineAM_ARC0x20/*存档Archive*/
#defineAM_MASK0x3F/*掩码位Maskofdefinedbits*/
/*快速查找功能Fastseekfeature*/
#defineCREATE_LINKMAP0xFFFFFFFF
/*--------------------------------*/
/*多字节字访问宏Multi-bytewordaccessmacros*/
#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/*FAT结构用位访问Usebyte-by-byteaccesstotheFATstructure*/
#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*/

免责声明:文章转载自《文件系统FatFsR0.09a翻译(三):ff.h》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇inux反选删除文件二、获取微信用户openId下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php基础入门(一)环境搭建与配置

最近在学习PHP,以下是看PHP100视频教程,做的学习笔记,在这里存放以便今后使用。 apache--PHP--DB(mysql) 一、apache:基本工作 ·用户通过浏览器访问服务器的文件,它就将该文件传递给用户,在用户的浏览器显示该文件的内容。 ·普通文本文件,可以通过apache直接传给用户浏览器显示。 ·程序文件,比如PHP,它不能直接在浏览器...

Ansible进阶

YAML YAML简介   YAML是一个可读性高,并用来表达资料序列的格式。YAML参考了其它多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等   它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言 YAML特性   YAML的可读性好   ...

Unity3D ZFBrowser (EmbeddedBrowser) 插件嵌入网页无法输入中文问题

  网页嵌入插件最好的应该就是ZFBrowser了, 可是使用起来也是问题多多, 现在最要命的是网页输入不能打中文, 作者也没打算接入IME, 只能自己想办法了...   搞了半天只想到一个办法, 就是通过Unity的IME去触发中文输入, 然后传入网页, 也就是说做一个透明的 InputField 盖住网页的输入文本框, 然后在 Update 或是 on...

WINCE系统声音定制

作者:ARM-WinCE 2010的第一篇Blog,介绍一下WinCE系统声音的定制。说白了,就是设置注册表。WinCE系统启动的开机音乐,点击触摸屏以及键盘输入的按键音,还有系统运行过程中的各种声音其实都是在注册表里面预先设置好的。这里做个简单介绍: 整个WinCE系统声音注册表设置如下: [HKEY_CURRENT_USER\ControlPanel...

log4j常见问题

1.日志文件不能生成日期后缀   需求:想要生成的文件是以日期格式为后缀或者结尾的。     设置: log4j.appender.appenderName.DatePattern='.'yyyy-MM-dd      也没有在目录下找到带有时间后缀的log文件。   原因分析:     log4j会自己根据系统时间来滚动生成改后缀。     比如今天是1...

饿了么vue-cli3.0+cube-ui笔记

1、目录结构 模板文件是public里的index.html,运行项目的时候,会引用src/main.js(入口文件) 详细文档在这里:https://cli.vuejs.org/zh/config/#pwa public:放着html模板和静态资源,public/index.html文件是一个会被html-webpack-plugin处理的模板。在构建...