您尚未登录。

楼主 #1 2018-07-17 20:25:50

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

为什么fsync并不能保证写入到磁盘?

如题,我在arm linux中将数据保存到外部sd卡,保存成功后(操作无返回错误),断电,检查sd卡数据。

发现sd卡容量发生了变化,但是sd卡中并无文件。。。隐藏文件也没有。。。

操作姿势如下:
     fopen()
     fwrite()
     fflush()
     fd = fileno()
     fsync(fd)
断电 
     

没有找出什么问题,我自己尝试了下调用sync(),发现还是比较可靠,能解决问题,只是sync操作比较费时。
但是为什么fsync无效啊??  教科书不都是这么用的吗?

离线

#2 2018-07-17 20:35:42

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 为什么fsync并不能保证写入到磁盘?

fflush(文件句柄)

这个试一试。





离线

楼主 #3 2018-07-17 20:51:53

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

Re: 为什么fsync并不能保证写入到磁盘?

晕哥 说:

fflush(文件句柄)

这个试一试。


我的里面有,然并卵...

离线

#4 2018-07-17 21:03:48

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 为什么fsync并不能保证写入到磁盘?

前几天公司同事反应同样的问题,
客户设置完参数马上(真的非常快)断电重启,
重启后参数未生效,
后来加上fflush解决这个问题。

sync命令是busybox实现的,
我去看看他调用了什么接口,
估计他同步的数据比较多,所以时间久。

你用的是 N32926吗?





离线

楼主 #5 2018-07-18 09:06:05

tom
会员
注册时间: 2018-03-14
已发帖子: 128
积分: 127.5

Re: 为什么fsync并不能保证写入到磁盘?

我使用的是c库的sync函数,不是system("sync"),  不过应该是大同小异。 

用的ti的达芬奇,内核有点老,2.6.37的,不知道有没有关系。

离线

#6 2018-07-18 10:04:03

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 为什么fsync并不能保证写入到磁盘?

http://man7.org/linux/man-pages/man3/fflush.3.html

注意
       请注意,fflush()仅刷新由提供的用户空间缓冲区
       C库。确保数据物理存储在磁盘上
       必须刷新内核缓冲区,例如,使用sync(2)或
        fsync(2)。

估计fflush只保证更新C lib里面数据到内核空间, 不一定会更新到物理存储。





离线

#7 2019-01-28 11:10:15

xinyu_khan
会员
注册时间: 2019-01-15
已发帖子: 31
积分: 31

Re: 为什么fsync并不能保证写入到磁盘?

原来如此,多谢解答

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn