FATFS 初學之 f_sync


 1 /*-----------------------------------------------------------------------*/
 2 /* Synchronize the File Object                                           */
 3 /*-----------------------------------------------------------------------*/
 4 
 5 FRESULT f_sync (
 6     FIL *fp        /* Pointer to the file object */
 7 )
 8 {
 9     FRESULT res;
10     DWORD tim;
11     BYTE *dir;
12 
13 
14     res = validate(fp->fs, fp->id);        /* Check validity of the object */
15     if (res == FR_OK) {
16         if (fp->flag & FA__WRITTEN) {    /* Has the file been written? */
17 #if !_FS_TINY    /* Write-back dirty buffer */
18             if (fp->flag & FA__DIRTY) {
19                 if (disk_write(fp->fs->drv, fp->buf, fp->dsect, 1) != RES_OK)
20                     LEAVE_FF(fp->fs, FR_DISK_ERR);
21                 fp->flag &= ~FA__DIRTY;
22             }
23 #endif
24             /* Update the directory entry */
25             res = move_window(fp->fs, fp->dir_sect);
26             if (res == FR_OK) {
27                 dir = fp->dir_ptr;
28                 dir[DIR_Attr] |= AM_ARC;                    /* Set archive bit */
29                 ST_DWORD(dir+DIR_FileSize, fp->fsize);        /* Update file size */
30                 ST_CLUST(dir, fp->sclust);                    /* Update start cluster */
31                 tim = get_fattime();                        /* Update updated time */
32                 ST_DWORD(dir+DIR_WrtTime, tim);
33                 fp->flag &= ~FA__WRITTEN;
34                 fp->fs->wflag = 1;
35                 res = sync(fp->fs);
36             }
37         }
38     }
39 
40     LEAVE_FF(fp->fs, res);
41 }
View Code

函數功能:沖洗一個寫文件的緩存信息

描述:

f_sync函數當 _FS_READONLY == 0時可用。
f_sync函數和 f_close函數執行同樣的過程,但是文件仍處於打開狀態,並且可以繼續對文件執行讀/寫/移動
指針操作。這適用於以寫模式長時間打開文件,比如數據記錄器。定期的或f_write后立即執行f_sync可以將
由於突然斷電或移去磁盤而導致數據丟失的風險最小化。在 f_close前立即執行 f_sync沒有作用,因為在
f_close中執行了f_sync。換句話說,這兩個函數的差異就是文件對象是不是無效的。

 

---------------------------------------- 我是分割線 ----------------------------------------

原文地址:http://blog.sina.com.cn/s/blog_66ffe2770100w2p7.html

當對FAT文件系統的寫操作由於默寫意外而中斷,如突然斷電,不正確的磁盤移除或不可恢復的磁盤錯誤,FAT結構可以被毀壞。下面的圖片顯示了FatFs的臨界段。

紅色區域的中斷會導致一個交叉鏈接,結果,正在修改的文件/目錄可能會丟失。而黃色區域中斷可能導致的效果在下面列出:

正在重寫的文件數據被毀壞。

正在添加內容的文件回到初始狀態。

丟失新建的文件。

一個新建或覆蓋的文件保持長度為0。

因為丟失關聯,磁盤的使用效率變壞。

 

在文件不是用寫模式打開時,這些情況不會發生。為了最小化磁盤數據的丟失,臨界段可以像圖表5顯示的那樣最小化,通過最小化文件處於寫模式打開的時間或者適當的使用f_sync函數。

---------------------------------------- 我是分割線 ----------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM