日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fatfs文件系所有函数总结

發(fā)布時(shí)間:2025/6/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fatfs文件系所有函数总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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代碼頁,包括DBCSANSI/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)的指針。FileNameNULL結(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。