fatfs 读取html,FATFS 初学之 f_sync

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

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。换句话说,这两个函数的差异就是文件对象是不是无效的。

---------------------------------------- 我是分割线 ----------------------------------------

当对FAT文件系统的写操作由于默写意外而中断,如突然断电,不正确的磁盘移除或不可恢复的磁盘错误,FAT结构可以被毁坏。下面的图片显示了FatFs的临界段。

e3d509e895cda00e78da9db48086fc06.png

红色区域的中断会导致一个交叉链接,结果,正在修改的文件/目录可能会丢失。而黄色区域中断可能导致的效果在下面列出:

正在重写的文件数据被毁坏。

正在添加内容的文件回到初始状态。

丢失新建的文件。

一个新建或覆盖的文件保持长度为0。

因为丢失关联,磁盘的使用效率变坏。

在文件不是用写模式打开时,这些情况不会发生。为了最小化磁盘数据的丢失,临界段可以像图表5显示的那样最小化,通过最小化文件处于写模式打开的时间或者适当的使用f_sync函数。

---------------------------------------- 我是分割线 ----------------------------------------

原文:http://www.cnblogs.com/Danhuise/p/3910141.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值