接着上次内容:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */
FATFS *fs, /* File system object */
DWORD clst /* Cluster# to be converted */
) //这个函数是将簇号转变为对应的扇区号。
clst * fs->csize + fs->database; //这个是算法
FRESULT dir_seek (
DIR *dj, /* Pointer to directory object */
WORD idx /* Directory index number */
)//这个函数的最终目的是根据索引号找到目录项所在簇、所在扇区、并是目录对象的对象指针指向文件系统对象窗口扇区的对应位置。
FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:EOT and could not streach */
DIR *dj, /* Pointer to directory object */
BOOL streach /* FALSE: Do not streach table, TRUE: Streach table if needed /
) //移动当前目录项,根据索引,源代码简单看了一下,作用还不是很清晰,先放过。
接下来有5个函数与长文件名有关,这里先跳过。
FRESULT dir_find (
DIR *dj /* Pointer to the directory object linked to the file name */
)//
FRESULT dir_read (
DIR *dj /* Pointer to the directory object that pointing the entry to be 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: Successful, FR_DISK_ERR: A disk error */
DIR *dj /* Directory object pointing the entry to be removed */
)
//以上这些函数都是对目录项的操作函数。
FRESULT create_name (
DIR *dj, /* Pointer to the directory object */
const XCHAR **path /* Pointer to pointer to the segment in the path string */)
//这个函数太长了,具体用到的时候再说吧。
void get_fileinfo ( /* No return code */
DIR *dj, /* Pointer to the directory object */
FILINFO *fno /* Pointer to store the file information */)
该函数用于获取文件状态信息。主要是从文件的目录项中获取信息。
FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */
DIR *dj, /* Directory object to return last directory and found object */
const XCHAR *path /* Full-path string to find a file or directory */
)
该函数给定一个全路径,得到相应的目录对象。
BYTE check_fs ( /* 0:The FAT boot record, 1:Valid boot record but not an FAT, 2:Not a boot record, 3:Error */
FATFS *fs, /* File system object */
DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */)
该函数用于读取BOOT扇区,检查是否FAT文件系统。
FRESULT auto_mount ( /* FR_OK(0): successful, !=0: any error occured */
const XCHAR **path, /* Pointer to pointer to the path name (drive number) */
FATFS **rfs, /* Pointer to pointer to the found file system object */
BYTE chk_wp /* !=0: Check media write protection for write access */)
这个函数的功能不太明白。
FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */
FATFS *fs, /* Pointer to the file system object */
WORD id /* Member id of the target object to be checked */
)//检查是否合法的文件系统。
FRESULT f_mount (
BYTE vol, /* Logical drive number to be mounted/unmounted */
FATFS *fs /* Pointer to new file system object (NULL for unmount)*/)
这是一个很重要的函数,装载文件系统。也是从这个函数开始,对外输出供用户调用。
if (vol >= _DRIVES)现在只支持卷号0.
FatFs[vol] = fs;将参数文件系统对象指针赋给全局文件对象指针。
后面的函数主要是对文件和目录进行操作,这里就不一一例举了。
下面开始文件系统的执行流程分析。
文章评论(0条评论)
登录后参与讨论