




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、fatfs 文件系統(tǒng)源碼分析一、概述1、目的在移植之前, 先將源代碼大概的閱讀一遍, 主要是了解文件系統(tǒng)的結(jié)構(gòu)、 各個(gè)函數(shù)的功能和 接口、與移植相關(guān)的代碼等等。2、準(zhǔn)備工作在官方網(wǎng)站下載了 0.07c 版本的源代碼,利用記事本進(jìn)行閱讀。二、源代碼的結(jié)構(gòu)1、源代碼組成源代碼壓縮包解壓后,共兩個(gè)文件夾, doc 是說(shuō)明, src 里就是代碼。 src 文件夾里共五 個(gè)文件和一個(gè)文件夾。文件夾是 option ,還有 00readme.txt 、 diskio.c 、diskio.h 、 ff.c 、 ff.h 、 integer.h 。對(duì)比網(wǎng)上的文章,版本已經(jīng)不同了,已經(jīng)沒(méi)有所謂的 tff.c 和
2、 tff.h 了,估 計(jì)現(xiàn)在都采用條件編譯解決這個(gè)問(wèn)題了,當(dāng)然文件更少,可能編譯選項(xiàng)可能越復(fù)雜。2、 00readme.txt 的說(shuō)明Low level disk I/O module is not included in this archive because the FatFsmodule is only a generic file system layer and not depend on any specific storagedevice. You have to provide a low level disk I/O module that written to contr
3、ol yourstorage device. 主要是說(shuō) 不包含底層 IO 代碼 ,這是個(gè)通用文件系統(tǒng)可以在各種介質(zhì)上使用。 我們移植時(shí)針對(duì)具體存儲(chǔ)設(shè)備提供底層代碼。接下來(lái)做了版權(quán)聲明- 可以自由使用和傳播。然后對(duì)版本的變遷做了說(shuō)明。3、源代碼閱讀次序先讀 integer.h, 了解所用的數(shù)據(jù)類型,然后是 ff.h, 了解文件系統(tǒng)所用的數(shù)據(jù)結(jié)構(gòu)和各種函 數(shù)聲明, 然后是 diskio.h ,了解與介質(zhì)相關(guān)的數(shù)據(jù)結(jié)構(gòu)和操作函數(shù)。 再把 ff.c 和 diskio.c 兩 個(gè)文件所實(shí)現(xiàn)的函數(shù)大致掃描一遍。 最后根據(jù)用戶應(yīng)用層程序調(diào)用函數(shù)的次序仔細(xì)閱讀相關(guān) 代碼。三、源代碼閱讀1 、 integer.
4、h頭文件這個(gè)文件主要是類型聲明。以下是部分代碼。typedef int INT;typedef unsigned int UINT;typedef signed charCHAR;/* These types must be 8-bit integer */都是用 typedef 做類型定義。移植時(shí)可以修改這部分代碼,特別是某些定義與你所在工程 的類型定義有沖突的時(shí)候。2 、ff.h 頭文件以下是部分代碼的分析#include “ integer.h ” 使用 integer.h 的類型定義#ifndef _FATFS#define _FATFS 0x007C 版本號(hào) 007c , 0.07c
5、#define _WORD_ACCESS 0 / 如果定義為 1 ,則可以使用 word 訪問(wèn)。中間有一些看著說(shuō) 明很容易弄清楚意思。這里就不例舉了。#define _CODE_PAGE 936 /* The _CODE_PAGE specifies the OEM code page to be used on the target system./ 936 -Simplified Ch in ese GBK (DBCS, OEM, Win dows)跟據(jù)這個(gè) 中國(guó)應(yīng)該是 936.打開 option 文件夾看一下。打開 cc936.c 文件,里面有一個(gè)很大的數(shù)組 static const W
6、CHAR uni2oem 。根據(jù)英文說(shuō)明,這個(gè)數(shù)組用于 unicode 碼和 OEM 碼之間的相互轉(zhuǎn)換。 接下來(lái)又有兩個(gè)函數(shù) ff_convert() 和 ff_wtoupper() 具體執(zhí)行碼型轉(zhuǎn)換和將字符轉(zhuǎn)換為大 寫。百度一下:看 OEM 碼什么意思。unicode 是一種雙字節(jié)字符編碼 ,無(wú)論中文還是英文,或者其他語(yǔ)言統(tǒng)一到 2 個(gè)字節(jié)。與 現(xiàn)有的任何編碼( ASCII,GB 等)都不兼容。 WindowsNT(2000) 的內(nèi)核即使用該編碼,所 有數(shù)據(jù)進(jìn)入內(nèi)核前轉(zhuǎn)換成 UNICODE, 退出內(nèi)核后在轉(zhuǎn)換成版本相關(guān)的編碼 (通常稱為 OEM , 在簡(jiǎn)體中文版下即為 G B) . (百度所
7、得) 繼續(xù)往下閱讀。#define _USE_LFN 1/這個(gè)估計(jì)是長(zhǎng)文件名支持了,以前的 0.06版本好像是不支持。#define _MAX_LFN 255/最長(zhǎng)支持 255 個(gè)雙字節(jié)字符。#define _FS_RPATH 0/ 是否文件相對(duì)路徑選項(xiàng)。/* When _FS_RPATH is set to 1, relative path feature is enabled and f_chdir,/ f_chdrive function are available./有些函數(shù)會(huì)受影響。/ Note that output of the f_readdir fnction is affe
8、cted by this option. */#define _FS_REENTRANT 0/如果要支持文件系統(tǒng)可重入,必須加入幾個(gè)函數(shù)。#define _TIMEOUT 1000 /* Timeout period in unit of time ticks of the OS */#define _SYNC_t HANDLE /* Type of sync object used on the OS. e.g. HANDLE,OS_EVENT*, ID and etc. */ /* To make the FatFs module re-entrant, set _FS_REENTRANT
9、 to 1 and add user/ provided synchronization handlers, ff_req_grant, ff_rel_grant, ff_del_syncobj/ and ff_cre_syncobj function to the project. */#elif _CODE_PAGE = 936 /* Simplified Chinese GBK */#defi ne _DF1S 0 X81#define _DF1E 0xFE#defi ne _DS1S 0 X40#define _DS1E 0x7E#defi ne _DS2S 0 X80#define
10、_DS2E 0xFE接下來(lái)很大一部分都是與語(yǔ)言相關(guān)的因素,略過(guò)。/* Character code support macros */三個(gè)宏判斷是否大寫、小寫、數(shù)字。#define IsUpper(c) (c)>='A')&&(c)<='Z')#define IsLower(c) (c)>=' a')&&(c)<='z')#define IsDigit(c) (c)>=' 0 )&&(c)<=' 9 )#if _DF1S /* DB
11、CS configuration */ 雙字節(jié)編碼相關(guān)的設(shè)定,暫時(shí)不理會(huì)它。#if _MULTI_PARTITION/* Multiple partition configuration */ 該變量定義為 1 時(shí),支持一個(gè)磁盤的多個(gè)分區(qū)。typedef struct _PARTITION BYTE pd; /* Physical drive# */BYTE pt;/* Partition # (0-3) */BYTE pt;/* Partition # (0-3) */ PARTITION;Extern const PARTITION Drives#define LD2PD(drv) (Dr
12、ivesdrv.pd)#define LD2PT(drv) (Drivesdrv.pt) #else;/ 如果支持分區(qū),則聲明變量 Drivers/* 獲得磁盤對(duì)應(yīng)的物理磁盤/* 獲得磁盤對(duì)應(yīng)的分區(qū)/* Single partition configuration */#define LD2PD(drv) (drv)/* Physical drive# is equal to the logical drive# */#define LD2PT(drv) 0/* Always mounts the 1st partition */#if _MAX_SS = 512/ 一般扇區(qū)長(zhǎng)度取 512 字
13、節(jié)。BYTE pt;/* Partition # (0-3) */BYTE pt;/* Partition # (0-3) */#define SS(fs) 512U #if _LFN_UNICODE && _USE_LFNtypedef WCHAR XCHAR;/* Unicode */ XCHAR是文件名的碼型所用。#elsetypedef char XCHAR;/* SBCS, DBCS */#endiftypedef struct _FATFS_ BYTE fs_type;BYTE drive;/* FAT sub type */* 對(duì)應(yīng)實(shí)際驅(qū)動(dòng)號(hào) 01 */BYTE
14、csize;/* 每個(gè)簇的扇區(qū)數(shù)目 */DWORD fsi_sector;/* fsinfo sector */先查一下 簇的含義:應(yīng)該是文件數(shù)據(jù)分配的基本單位BYTE n_fats; /* 文件分配表的數(shù)目 */FAT 文件系統(tǒng)依次應(yīng)該是:引導(dǎo)扇區(qū)、文件分配表兩個(gè)、根目錄區(qū)和數(shù)據(jù)區(qū)。BYTE wflag;/* win dirty flag (1:must be written back) */ 文件是否改動(dòng)的標(biāo)志,為 1 時(shí)要回寫。WORD id;/* File system mount ID 文件系統(tǒng)加載ID*/WORD n_rootdir;/* 根目錄區(qū)目錄項(xiàng)的數(shù)目 */WORD id;
15、/* 文件系統(tǒng)加載 ID*/DWORD fsi_sector;/* fsinfo sector */WORD id;/* 文件系統(tǒng)加載 ID*/DWORD fsi_sector;/* fsinfo sector */* 允許重入,則定義同步對(duì)象 */* Sector size */#if _FS_REENTRANT_SYNC_t sobj;#endif #if _MAX_SS != 512WORD s_size;#endif #if !_FS_READONLY / 文件為可寫B(tài)YTE fsi_flag; /* fsinfo dirty flag (1:must be written back)
16、 */ 文件需要回寫的標(biāo)志#endif#if _FS_RPATH/* 使用相對(duì)路徑,則要存儲(chǔ)文件系統(tǒng)當(dāng)前目錄DWORD cdir;#endifDWORDsects_fat;/* 文件分配表占用的扇區(qū)DWORDmax_clust;/* 最大簇?cái)?shù)DWORDfatbase; /* 文件分配表開始扇區(qū)DWORDdirbase; /* 如果是 FAT32 ,根目錄開始扇區(qū)需要首先得到。DWORD database;/* 數(shù)據(jù)區(qū)開始扇區(qū)WORD id;/* 文件系統(tǒng)加載 ID*/DWORD fsi_sector;/* fsinfo sector */WORD id;/* 文件系統(tǒng)加載 ID*/DWORD
17、fsi_sector;/* fsinfo sector */DWORDwinsect; /* Current sector appearing in the win */ / 目前的扇區(qū)在 win 里面,這個(gè) win 數(shù)組暫時(shí)還不知道含義。BYTE win_MAX_SS;/* Disk access window for Directory/FAT */ 這是一個(gè) win512 數(shù)組,存儲(chǔ)著一個(gè)扇區(qū),好像作為扇區(qū)緩沖使用。 FATFS;指向相應(yīng)文件系統(tǒng)對(duì)象。typedef struct _DIR_ FATFS* fs;/* Pointer to the owner file system ob
18、ject */WORD id;/* 文件系統(tǒng)加載 ID*/WORD index;/* Current read/write index number */目前讀寫索引代碼DWORD sclust; /* Table start cluster (0:Static table) */ 文件數(shù)據(jù)區(qū)開始簇DWORDclust;/* Current cluster */目前處理的簇DWORDsect;/* Current sector */目前簇里對(duì)應(yīng)的扇區(qū)BYTE* dir; /* Pointer to the current SFN entry in the win */BYTE* fn;/* P
19、ointer to the SFN (in/out) file8,ext3,status1 */#if _USE_LFNWCHAR* lfn; /* Pointer to the LFN working buffer */ 指向長(zhǎng)文件名緩沖。WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */#endif DIR;typedef struct _FIL_ FATFS* fs;/* Pointer to the owner file system object */WORD id;/* Owner file syste
20、m mount ID */BYTE flag;/* File status flags */文件狀態(tài)標(biāo)志BYTE csect;/* Sector address in the cluster */扇區(qū)偏移DWORD fptr; /* File R/W pointer */ 讀寫指針DWORDfsize;/* File size */DWORDorg_clust;/* File start cluster */文件開始簇DWORDcurr_clust;/* Current cluster */當(dāng)前簇DWORDdsect;/* Current data sector */文件當(dāng)前扇區(qū)#if !_F
21、S_READONLY該文件目錄項(xiàng)對(duì)DWORDdir_sect; /* Sector containing the directory entry */應(yīng)所在的扇區(qū)BYTE* dir_ptr; /* Ponter to the directory entry in the window */ #endif#if !_FS_TINYBYTE buf_MAX_SS;/* File R/W buffer */文件讀寫緩沖#endif FIL;/* File status structure */typedef struct _FILINFO_ DWORD fsize;/* File size */WO
22、RD fdate;/* Last modified date */BYTE fattrib;/* Attribute */WORD ftime;/* Last modified time */char fname13;/* Short file name (8.3 format) */#if _USE_LFNXCHAR* lfname;/* Pointer to the LFN buffer */int lfsize; /* Size of LFN buffer chrs */#endif FILINFO; 這個(gè)結(jié)構(gòu)主要描述文件的狀態(tài)信息,包括文件名 13 個(gè)字符( 8+.+3+0 )、屬 性
23、、修改時(shí)間等。接下來(lái)是函數(shù)的定義,先大概瀏覽一遍。FRESULT f_mount (BYTE, FATFS*);/加載文件系統(tǒng),BYTE參數(shù)是ID ,后一個(gè)是文件系統(tǒng)定義。FRESULT f_open (FIL*, const XCHAR*, BYTE);/ 打開文件,第一個(gè)參數(shù)是文件信息結(jié)構(gòu), 第二個(gè)參數(shù)是文件名,第三是文件打開模式FRESULT f_read (FIL*, void*, UINT, UINT*);/文件讀取函數(shù),參數(shù) 1為文件對(duì)象(文件打開函數(shù)中得到),參數(shù) 2 為文件讀取緩沖區(qū),參數(shù) 3 為讀取的字節(jié)數(shù),參數(shù) 4 意義不清 晰,等讀到源代碼就清楚了。FRESULT f_w
24、rite (FIL*, const void*, UINT, UINT*);/寫文件,參數(shù)跟讀差不多FRESULT f_lseek (FIL*, DWORD); / 移動(dòng)文件的讀寫指針,參數(shù) 2應(yīng)該是移動(dòng)的數(shù)目。FRESULT f_close (FIL*);/* Close an open file object */打開目錄,返回目錄對(duì)象FRESULT f_opendir (DIR*, const XCHAR*);讀取目錄,獲得文件信息FRESULT f_readdir (DIR*, FILINFO*);FRESULT f_stat (const XCHAR*, FILINFO*);/* G
25、et file status */FRESULT f_getfree (const XCHAR*, DWORD*, FATFS*);/* Get number of freeclusters on the drive */FRESULT f_truncate (FIL*);/* Truncate file */FRESULT f_sync (FIL*); /* Flush cached data of a writing file */將緩沖區(qū)數(shù)據(jù)寫回文件FRESULT f_unlink (const XCHAR*);刪除目錄中的一個(gè)文件FRESULT f_mkdir (const XCHAR
26、*);/* Create a new directory */FRESULT f_chmod (const XCHAR*, BYTE, BYTE); /* Change attriburte of the file/dir */FRESULT f_utime (const XCHAR*, const FILINFO*);/* Change timestamp of thefile/dir */FRESULT f_rename (const XCHAR*, const XCHAR*);/* Rename/Move a file ordirectory */FRESULT f_forward (F
27、IL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward datato the stream */ 這個(gè)函數(shù)還要提供一個(gè)回調(diào)函數(shù)。FRESULT f_mkfs (BYTE, BYTE, WORD);/* Create a file system on the drive */FRESULT f_chdir (const XCHAR*);/* Change current directory */改變當(dāng)前目錄FRESULT f_chdrive (BYTE);/* Change current drive */應(yīng)該說(shuō)基本能明白這些函數(shù)用于干什
28、么。#if _USE_STRFUNCint f_putc (int, FIL*);/* Put a character to the file */int f_puts (const char*, FIL*);/* Put a string to the file */int f_printf (FIL*, const char*,);/* Put a formatted string to the file*/char* f_gets (char*, int, FIL*);/* Get a string from the file */#define f_eof(fp) (fp)->f
29、ptr = (fp)->fsize) ? 1 : 0)#define f_error(fp) (fp)->flag & FA_ERROR) ? 1 : 0)#if _FS_REENTRANT / 如果定義了重入,則需要實(shí)現(xiàn)以下四個(gè)函數(shù)BOOL ff_cre_syncobj(BYTE, _SYNC_t*);創(chuàng)建同步對(duì)象BOOL ff_del_syncobj(_SYNC_t);刪除同步對(duì)象BOOL ff_req_grant(_SYNC_t);申請(qǐng)同步對(duì)象void ff_rel_grant(_SYNC_t); 釋放同步對(duì)象。#endif3、diskio.h 文件typedef B
30、YTE DSTATUS;這個(gè)函數(shù)不知道干嗎t(yī)ypedef DRESULT; / 首先定義了兩個(gè)變量,各個(gè)函數(shù)都有用到。BOOL assign_drives (int argc, char *argv); /DSTATUS disk_initialize (BYTE); /磁盤初始化DSTATUS disk_status (BYTE); / 獲取磁盤狀態(tài)DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);#if _READONLY = 0DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);#endifDRE
31、SULT disk_ioctl (BYTE, BYTE, void*); /磁盤控制接下來(lái)還有一些常數(shù)的定義,具體用到時(shí)在看。4、diskio.c 的結(jié)構(gòu)DSTATUS disk_initialize (BYTE drv/* Physical drive nmuber (0.) */)DSTATUS stat;int result;switch (drv) case ATA :result = ATA_disk_initialize();/ translate the reslut code here return stat;case MMC :result = MMC_disk_initia
32、lize();/ translate the reslut code herereturn stat;case USB :result = USB_disk_initialize();/ translate the reslut code herereturn stat;return STA_NOINIT;函數(shù)基本都像這樣, drv 表示磁盤的類型。沒(méi)有實(shí)現(xiàn), 用戶必須實(shí)現(xiàn)這部分代碼 。5、ff.c 文件簡(jiǎn)單瀏覽#include “ ff.h ”/* FatFs configurations and declarations */#include “ diskio.h ” /* Declara
33、tions of low level disk I/O functions */#define ENTER_FF(fs) if (!lock_fs(fs) return FR_TIMEOUT; /獲取文件系統(tǒng)同步對(duì)象,不成功返回超時(shí),成功,繼續(xù)執(zhí)行。釋放文件系統(tǒng)同步對(duì)#define LEAVE_FF(fs, res) unlock_fs(fs, res); return res; /象。Static FATFS *FatFs_DRIVES; / 定義一個(gè)文件系統(tǒng)對(duì)象指針數(shù)組,當(dāng)然一般我們也就用 到一個(gè)元素。Static WORD LfnBuf_MAX_LFN + 1; / 這個(gè)是與長(zhǎng)文件名支持
34、相關(guān)的。#define NAMEBUF(sp,lp) BYTE sp12; WCHAR *lp = LfnBuf#define INITBUF(dj,sp,lp) dj.fn = sp; dj.lfn = lp下面都是函數(shù)的定義,很多只在內(nèi)部使用。Static void mem_cpy (void* dst, const void* src, int cnt) char *d = (char*)dst;const char *s = (const char *)src;while (ent *d+ = *s+; / 接下來(lái)還定義了幾個(gè)內(nèi)存操作的函數(shù),這個(gè)函數(shù)實(shí)現(xiàn)了從一塊內(nèi)存到另一塊的復(fù)制,下
35、面還有 mem_set ()對(duì)一塊內(nèi)存進(jìn)行清 0 或設(shè)置操作; mem_emp ()比較內(nèi)存的多個(gè)字 節(jié)是否相同,相同返回0; ehk_ehr ()檢測(cè)字符串中是否存在某個(gè)字符,存在則返回該字符。FRESULT move_window (FATFS *fs,/* File system objeet */DWORD seetor/* Seetor number to make apperanee in the fs->win */)/ 簡(jiǎn)單閱讀了一下源代碼,應(yīng)該是 改變文件系統(tǒng)的當(dāng)前工作扇區(qū) ,如果想要操作的扇區(qū)就 是當(dāng)前扇區(qū),什么事不做;如果不是,則將原扇區(qū)寫回;如果是 FAT 表,還
36、得寫入備份區(qū)。 這個(gè)函數(shù)內(nèi)部使用,外部無(wú)法引用。FRESULT sync ( /* FR_OK: successful, FR_DISK_ERR: failed */FATFS *fs /* File system object */)/ 這個(gè)函數(shù)用于更新 FAT32 文件系統(tǒng)的 FSI_Sector 。什么含義還不太清楚。DWORD get_fat (/* 0xFFFFFFFF:Disk error, 1:Interal error, Else:Cluster status */FATFS *fs, /* File system object */DWORD clst/* Cluster#
37、to get the link information */)if (move_window(fs, fsect + (clst / (SS(fs) / 4) break;獲取簇號(hào)碼對(duì)應(yīng)的 FAT 扇區(qū)return LD_DWORD(&fs->win(WORD)clst * 4) & (SS(fs) - 1) & 0x0FFFFFFF; /這個(gè)函數(shù)應(yīng)該是獲取簇的下一個(gè)連接簇。綜合起來(lái),這個(gè)函數(shù)應(yīng)該是獲取下一簇,感覺(jué)這個(gè)函數(shù)名起得不太好。 get_nextcluster 感 覺(jué)更好一點(diǎn)。FRESULT put_fat (FATFS *fs, /* File syst
38、em object */DWORD val /* New value to mark the cluster */ )/ 上個(gè)函數(shù)是獲取連接簇,這個(gè)是寫入新的連接信息。FRESULT remove_chain (FATFS *fs,/* File system object */DWORD clst/* Cluster# to remove a chain from */)/ 將下一簇號(hào)寫為 0 ,也就是該文件的簇到此為止,同時(shí)系統(tǒng)的自由簇增加1.DWORD create_chain (/* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Dis
39、kerror, >=2:New cluster# */FATFS *fs,/* File system object */DWORD clst/* Cluster# to stretch. 0 means create a new chain. */)/ 跟上一個(gè)相反,在該簇的位置寫入新的下一簇簇號(hào)。DWORD clust2sect (/* !=0: Sector nu mber,0: Failed in valid cluster# */FATFS *fs,/* File system object */DWORD clst/* Cluster# to be converted */)
40、 / 這個(gè)函數(shù)是將簇號(hào)轉(zhuǎn)變?yōu)閷?duì)應(yīng)的扇區(qū)號(hào)。clst * fs->csize + fs->database; /這個(gè)是算法FRESULT dir_seek (DIR *dj,/* Pointer to directory object */WORD idx/* Directory index number */)/ 這個(gè)函數(shù)的最終目的是根據(jù)索引號(hào)找到目錄項(xiàng)所在簇、所在扇區(qū)、并是目錄對(duì)象的對(duì)象 指針指向文件系統(tǒng)對(duì)象窗口扇區(qū)的對(duì)應(yīng)位置。FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:EOT
41、 and could not streach */DIR *dj, /* Pointer to directory object */BOOL streach/* FALSE: Do not streach table, TRUE: Streach table if needed/ ) / 移動(dòng)當(dāng)前目錄項(xiàng),根據(jù)索引,源代碼簡(jiǎn)單看了一下,作用還不是很清晰,先放過(guò)。接下來(lái)有 5 個(gè)函數(shù)與長(zhǎng)文件名有關(guān),這里先跳過(guò)。FRESULT dir_find (DIR *dj/* Pointer to the directory object linked to the file name */)/FRESUL
42、T dir_read (DIR *dj/* Pointer to the directory object that pointing the entry tobe read */FRESULT dir_register (/* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */DIR *dj/* Target directory with object name to be created */)FRESULT dir_remove (/* FR_OK:
43、Successful, FR_DISK_ERR: A disk error */DIR *dj/* Directory object pointing the entry to be removed */)/ 以上這些函數(shù)都是對(duì)目錄項(xiàng)的操作函數(shù)。FRESULT create_name (DIR *dj,/* Pointer to the directory object */const XCHAR *path/* Pointer to pointer to the segment in the path string*/)/ 這個(gè)函數(shù)太長(zhǎng)了,具體用到的時(shí)候再說(shuō)吧。void get_fileinfo (/* No return code */DIR *dj,/* Pointer to the directory object */FI
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目會(huì)議紀(jì)要與行動(dòng)方案跟進(jìn)
- 2025年瀘州道路運(yùn)輸從業(yè)資格證考試題和答案
- 企業(yè)運(yùn)營(yíng)標(biāo)準(zhǔn)化操作手冊(cè)
- 房東轉(zhuǎn)租合同協(xié)議書
- 2025年健康保健服務(wù)項(xiàng)目發(fā)展計(jì)劃
- 化妝品制造中的水分調(diào)節(jié)
- 2025年大興安嶺道路貨運(yùn)輸從業(yè)資格證模擬考試題庫(kù)
- 眼科用藥知識(shí)培訓(xùn)課件
- 酒店行業(yè)收入與利潤(rùn)表格(年度)
- 水電站自動(dòng)化控制系統(tǒng)操作規(guī)程匯編
- 礦山機(jī)械傷害安全培訓(xùn)
- 2025貴州省黔東南州直屬事業(yè)單位招聘202人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年語(yǔ)文高考復(fù)習(xí)計(jì)劃解析
- 新生兒腸道病毒感染
- 2025年度專業(yè)酒店裝修承攬合同
- 2025年度5G基站建設(shè)勞務(wù)合同范本
- (完整版)班主任量化考核細(xì)則
- 2025年中國(guó)鐵路鄭州局集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年上半年永春縣農(nóng)文旅發(fā)展集團(tuán)限公司公開招聘若干名工作人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 家庭康復(fù)服務(wù)的商業(yè)價(jià)值與發(fā)展趨勢(shì)
- 2025年危化企業(yè)安全教育培訓(xùn)計(jì)劃
評(píng)論
0/150
提交評(píng)論