Fatfs文件系所有函数总结
Fatfs文件系統(tǒng)常用函數(shù):f_mount、f_open、f_close、f_read、f_write、f_lseek、f_truncate、f_sync、f_opendir?
?
FatFS是一個(gè)為小型嵌入式系統(tǒng)設(shè)計(jì)的通用FAT(File Allocation Table)文件系統(tǒng)模塊。FatFs 的編寫遵循ANSI C,并且完全與磁盤I/O層分開。因此,它獨(dú)立(不依賴)于硬件架構(gòu)。它可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM, Z80, 68K 等等,而不需要做任何修改。
特點(diǎn):Windows兼容的FAT文件系統(tǒng),不依賴于平臺(tái),易于移植,代碼和工作區(qū)占用空間非常小,多種配置選項(xiàng):多卷(物理驅(qū)動(dòng)器和分區(qū))、多ANSI/OEM代碼頁,包括DBCS、在ANSI/OEM或Unicode中長文件名的支持、RTOS的支持、多扇區(qū)大小的支持、只讀,最少API,I/O緩沖區(qū)。
應(yīng)用程序接口:
FatFs 模塊為應(yīng)用程序提供了下列函數(shù),這些函數(shù)描述了FatFs能對FAT卷執(zhí)行哪些操作。
1.f_mount:在FatFs模塊上注冊/注銷一個(gè)工作區(qū)(文件系統(tǒng)對象)
2.f_open:創(chuàng)建/打開一個(gè)用于訪問文件的文件對象
3.f_close:關(guān)閉一個(gè)打開的文件
4.f_read:從一個(gè)文件讀取數(shù)據(jù)
5.f_write:寫入數(shù)據(jù)到一個(gè)文件
6.f_lseek:移動(dòng)一個(gè)打開的文件對象的文件讀/寫指針。也可以被用來擴(kuò)展文件大小(簇預(yù)分配)。
7.f_truncate:截?cái)辔募笮?/span>
8.f_sync:沖洗一個(gè)寫文件的緩存信息
9.f_opendir:打開一個(gè)目錄
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
1.f_mount:在FatFs模塊上注冊/注銷一個(gè)工作區(qū)(文件系統(tǒng)對象)
原型:FRESULT f_mount?(?BYTE Drive,?FATFS*?FileSystemObject?);
參數(shù):Drive:注冊/注銷工作區(qū)的邏輯驅(qū)動(dòng)器號(hào)(0-9)。FileSystemObject工作區(qū)(文件系統(tǒng)對象)指針。
返回值:FR_OK (0):函數(shù)成功。FR_INVALID_DRIVE:驅(qū)動(dòng)器號(hào)無效
描述:f_mount函數(shù)在FatFs模塊上注冊/注銷一個(gè)工作區(qū)。在使用任何其他文件函數(shù)之前,必須使用該函數(shù)為每個(gè)卷注冊一個(gè)工作區(qū)。要注銷一個(gè)工作區(qū),只要指定FileSystemObject為NULL即可,然后該工作區(qū)可以被丟棄。該函數(shù)只初始化給定的工作區(qū),以及將該工作區(qū)的地址注冊到內(nèi)部表中,不訪問磁盤I/O層。卷裝入過程是在f_mount函數(shù)后或存儲(chǔ)介質(zhì)改變后的第一次文件訪問時(shí)完成的。
2.f_open:創(chuàng)建/打開一個(gè)用于訪問文件的文件對象
原型:FRESULT f_open?(?FIL*?FileObject,?const?XCHAR*?FileName,BYTE ModeFlags?);
參數(shù):FileObject:將被創(chuàng)建的文件對象結(jié)構(gòu)的指針。FileName:NULL結(jié)尾的字符串指針,該字符串指定了將被創(chuàng)建或打開的文件名。ModeFlags:指定文件的訪問類型和打開方法。它是由下列標(biāo)志的一個(gè)組合指定的。
注意:當(dāng) _FS_READONLY == 1 時(shí),模式標(biāo)志 FA_WRITE, FA_CREATE_ALWAYS, FA_CREATE_NEW, FA_OPEN_ALWAYS 是無效的。
返回值:
FR_OK (0):函數(shù)成功,該文件對象有效。
FR_NO_FILE:找不到該文件。
FR_NO_PATH:找不到該路徑。
FR_INVALID_NAME:文件名無效。
FR_INVALID_DRIVE:驅(qū)動(dòng)器號(hào)無效。
FR_EXIST:該文件已存在。
FR_DENIED:由于下列原因,所需的訪問被拒絕:
(1)以寫模式打開一個(gè)只讀文件。
(2)由于存在一個(gè)同名的只讀文件或目錄,而導(dǎo)致文件無法被創(chuàng)建。
(3)由于目錄表或磁盤已滿,而導(dǎo)致文件無法被創(chuàng)建。
FR_NOT_READY:由于驅(qū)動(dòng)器中沒有存儲(chǔ)介質(zhì)或任何其他原因,而導(dǎo)致磁盤驅(qū)動(dòng)器無法工作。
FR_WRITE_PROTECTED:在存儲(chǔ)介質(zhì)被寫保護(hù)的情況下,以寫模式打開或創(chuàng)建文件對象。
FR_DISK_ERR:由于底層磁盤I/O接口函數(shù)中的一個(gè)錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_INT_ERR:由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或一個(gè)內(nèi)部錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_NOT_ENABLED:邏輯驅(qū)動(dòng)器沒有工作區(qū)。
FR_NO_FILESYSTEM:磁盤上沒有有效地FAT卷。
描述:如果函數(shù)成功,則創(chuàng)建一個(gè)文件對象。該文件對象被后續(xù)的讀/寫函數(shù)用來訪問文件。如果想要關(guān)閉一個(gè)打開的文件對象,則使用f_close函數(shù)。如果不關(guān)閉修改后的文件,那么文件可能會(huì)崩潰。在使用任何文件函數(shù)之前,必須使用f_mount函數(shù)為驅(qū)動(dòng)器注冊一個(gè)工作區(qū)。只有這樣,其他文件函數(shù)才能正常工作。
3.?f_close:關(guān)閉一個(gè)打開的文件
原型:FRESULT f_close?(?FIL*?FileObject?);
參數(shù):FileObject:指向?qū)⒈魂P(guān)閉的已打開的文件對象結(jié)構(gòu)的指針。
返回值:
FR_OK (0) 文件對象已被成功關(guān)閉。
>FR_DISK_ERR 由于底層磁盤I/O函數(shù)中的錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_INT_ERR:由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或一個(gè)內(nèi)部錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_NOT_READY:由于驅(qū)動(dòng)器中沒有存儲(chǔ)介質(zhì)或任何其他原因,而導(dǎo)致磁盤驅(qū)動(dòng)器無法工作。
FR_INVALID_OBJECT:文件對象無效。
描述:f_close函數(shù)關(guān)閉一個(gè)打開的文件對象。無論向文件寫入任何數(shù)據(jù),文件的緩存信息都將被寫回到磁盤。該函數(shù)成功后,文件對象不再有效,并且可以被丟棄。如果文件對象是在只讀模式下打開的,不需要使用該函數(shù),也能被丟棄。
4.?f_read:從一個(gè)文件讀取數(shù)據(jù)
原型:FRESULT f_read?(?FIL*?FileObject,?void*?Buffer,?首先要定義一個(gè)至少512的內(nèi)存 UINT ByteToRead,?UINT*?ByteRead?);
參數(shù):
FileObject:指向?qū)⒈蛔x取的已打開的文件對象結(jié)構(gòu)的指針。
Buffer:指向存儲(chǔ)讀取數(shù)據(jù)的緩沖區(qū)的指針。
ByteToRead:要讀取的字節(jié)數(shù),UINT范圍內(nèi)。
ByteRead:指向返回已讀取字節(jié)數(shù)的UINT變量的指針。在調(diào)用該函數(shù)后,無論結(jié)果如何,數(shù)值都是有效的。
返回值:
FR_OK (0):函數(shù)成功。
FR_DENIED:由于文件是以非讀模式打開的,而導(dǎo)致該函數(shù)被拒絕。
FR_DISK_ERR:由于底層磁盤I/O函數(shù)中的錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_INT_ERR:由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或一個(gè)內(nèi)部錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_NOT_READY:由于驅(qū)動(dòng)器中沒有存儲(chǔ)介質(zhì)或任何其他原因,而導(dǎo)致磁盤驅(qū)動(dòng)器無法工作。
FR_INVALID_OBJECT:?文件對象無效。
描述:文件對象中的讀/寫指針以已讀取字節(jié)數(shù)增加。該函數(shù)成功后,應(yīng)該檢查 *ByteRead 來檢測文件是否結(jié)束。在讀操作過程中,一旦 *ByteRead < ByteToRead ,則讀/寫指針到達(dá)了文件結(jié)束位置。
5.?f_write:寫入數(shù)據(jù)到一個(gè)文件FRESULT
原型:f_write?(?FIL*?FileObject,?const?void*?Buffer,?UINT?ByteToWrite,UINT*?ByteWritten?);
參數(shù):
FileObject:指向?qū)⒈粚懭氲囊汛蜷_的文件對象結(jié)構(gòu)的指針。
Buffer:指向存儲(chǔ)寫入數(shù)據(jù)的緩沖區(qū)的指針。
ByteToRead:要寫入的字節(jié)數(shù),UINT范圍內(nèi)。
ByteRead:指向返回已寫入字節(jié)數(shù)的UINT變量的指針。在調(diào)用該函數(shù)后,無論結(jié)果如何,數(shù)值都是有效的。
返回值:
FR_OK (0):函數(shù)成功。
FR_DENIED:由于文件是以非寫模式打開的,而導(dǎo)致該函數(shù)被拒絕。
FR_DISK_ERR:由于底層磁盤I/O函數(shù)中的錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_INT_ERR:由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或一個(gè)內(nèi)部錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_NOT_READY:由于驅(qū)動(dòng)器中沒有存儲(chǔ)介質(zhì)或任何其他原因,而導(dǎo)致磁盤驅(qū)動(dòng)器無法工作。
FR_INVALID_OBJECT 文件對象無效。
描述:文件對象中的讀/寫指針以已寫入字節(jié)數(shù)增加。該函數(shù)成功后,應(yīng)該檢查 *ByteWritten 來檢測磁盤是否已滿。在寫操作過程中,一旦 *ByteWritten < *ByteToWritten ,則意味著該卷已滿。
6.?f_lseek:移動(dòng)一個(gè)打開的文件對象的文件讀/寫指針。也可以被用來擴(kuò)展文件大小(簇預(yù)分配)。
原型:FRESULT f_lseek?(?FIL*?FileObject,?DWORD Offset?);
參數(shù):
FileObject:打開的文件對象的指針
Offset:相對于文件起始處的字節(jié)數(shù)
返回值:
FR_OK (0):函數(shù)成功。
FR_DISK_ERR:由于底層磁盤I/O函數(shù)中的錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_INT_ERR:由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或一個(gè)內(nèi)部錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_NOT_READY:由于驅(qū)動(dòng)器中沒有存儲(chǔ)介質(zhì)或任何其他原因,而導(dǎo)致磁盤驅(qū)動(dòng)器無法工作。
FR_INVALID_OBJECT:文件對象無效。
描述:f_lseek函數(shù)當(dāng)FS_MINIMIZE <= 2時(shí)可用。offset只能被指定為相對于文件起始處的字節(jié)數(shù)。當(dāng)在寫模式下指定了一個(gè)超過文件大小的offset時(shí),文件的大小將被擴(kuò)展,并且該擴(kuò)展的區(qū)域中的數(shù)據(jù)是未定義的。這適用于為快速寫操作迅速地創(chuàng)建一個(gè)大的文件。f_lseek函數(shù)成功后,為了確保讀/寫指針已被正確地移動(dòng),必須檢查文件對象中的成員fptr。如果fptr不是所期望的值,則發(fā)生了下列情況之一。
(1)文件結(jié)束。指定的offset被鉗在文件大小,因?yàn)槲募驯灰灾蛔x模式打開。
(2)磁盤滿。卷上沒有足夠的空閑空間去擴(kuò)展文件大小。
用法:其實(shí)這個(gè)函數(shù)可以解決文件從頭開始讀的問題,如果你想打開一個(gè)文件,讀取里面的內(nèi)容,但又不想從頭開始讀,那么你可以使用這個(gè)函數(shù)來解決
7.?f_truncate:截?cái)辔募笮?/span>
原型:FRESULT f_truncate?(?FIL*?FileObject?);
參數(shù):FileObject:待截?cái)嗟拇蜷_的文件對象的指針。
返回值:
FR_OK (0:函數(shù)成功。
FR_DENIED:由于文件是以非寫模式打開的,而導(dǎo)致該函數(shù)被拒絕。
FR_DISK_ERR:由于底層磁盤I/O函數(shù)中的錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_INT_ERR:由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或一個(gè)內(nèi)部錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_NOT_READY:由于驅(qū)動(dòng)器中沒有存儲(chǔ)介質(zhì)或任何其他原因,而導(dǎo)致磁盤驅(qū)動(dòng)器無法工作。
FR_INVALID_OBJECT 文件對象無效。
描述:f_truncate函數(shù)當(dāng)_FS_READONLY == 0 并且 _FS_MINIMIZE == 0時(shí)可用。f_truncate函數(shù)截?cái)辔募疆?dāng)前的文件讀/寫指針。當(dāng)文件讀/寫指針已經(jīng)指向文件結(jié)束時(shí),該函數(shù)不起作用。
8.?f_sync:沖洗一個(gè)寫文件的緩存信息
原型:FRESULT f_sync?(?FIL*?FileObject?);
參數(shù):FileObject:待沖洗的打開的文件對象的指針。
返回值:
FR_OK (0):函數(shù)成功。
FR_DISK_ERR:由于底層磁盤I/O函數(shù)中的錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_INT_ERR:由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或一個(gè)內(nèi)部錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_NOT_READY:由于驅(qū)動(dòng)器中沒有存儲(chǔ)介質(zhì)或任何其他原因,而導(dǎo)致磁盤驅(qū)動(dòng)器無法工作。
FR_INVALID_OBJECT 文件對象無效。
描述:f_sync函數(shù)當(dāng)_FS_READONLY == 0時(shí)可用。f_sync函數(shù)和f_close函數(shù)執(zhí)行同樣的過程,但是文件仍處于打開狀態(tài),并且可以繼續(xù)對文件執(zhí)行讀/寫/移動(dòng)指針操作。這適用于以寫模式長時(shí)間打開文件,比如數(shù)據(jù)記錄器。定期的或f_write后立即執(zhí)行f_sync可以將由于突然斷電或移去磁盤而導(dǎo)致數(shù)據(jù)丟失的風(fēng)險(xiǎn)最小化。在f_close前立即執(zhí)行f_sync沒有作用,因?yàn)樵趂_close中執(zhí)行了f_sync。換句話說,這兩個(gè)函數(shù)的差異就是文件對象是不是無效的。
9.?f_opendir:打開一個(gè)目錄
原型:FRESULT f_opendir?(?DIR*?DirObject,?const?XCHAR*?DirName?);
參數(shù):
DirObject:待創(chuàng)建的空白目錄對象的指針。
DirName:'\0'結(jié)尾的字符串指針,該字符串指定了將被打開的目錄名。
返回值:
FR_OK (0):函數(shù)成功,目錄對象被創(chuàng)建。該目錄對象被后續(xù)調(diào)用,用來讀取目錄項(xiàng)。
FR_NO_PATH:找不到路徑。
FR_INVALID_NAME:路徑名無效。
FR_INVALID_DRIVE:驅(qū)動(dòng)器號(hào)無效。
FR_NOT_READY:由于驅(qū)動(dòng)器中沒有存儲(chǔ)介質(zhì)或任何其他原因,而導(dǎo)致磁盤驅(qū)動(dòng)器無法工作。
FR_DISK_ERR:由于底層磁盤I/O函數(shù)中的錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_INT_ERR:由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或一個(gè)內(nèi)部錯(cuò)誤,而導(dǎo)致該函數(shù)失敗。
FR_NOT_ENABLED:邏輯驅(qū)動(dòng)器沒有工作區(qū)。
FR_NO_FILESYSTEM:磁盤上沒有有效的FAT卷。
描述:f_opendir函數(shù)當(dāng)_FS_MINIMIZE <= 1時(shí)可用。f_opendir函數(shù)打開一個(gè)已存在的目錄,并為后續(xù)的調(diào)用創(chuàng)建一個(gè)目錄對象。該目錄對象結(jié)構(gòu)可以在任何時(shí)候不經(jīng)任何步驟而被丟棄。?
?
總結(jié)
以上是生活随笔為你收集整理的Fatfs文件系所有函数总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32---SPI通信的总结(库函数
- 下一篇: FATFS里的FILINFO结构体详解