由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 保存文件之后重启需要sync吗?
相关主题
一个奇怪的问题请推荐C++开发环境
G++用-g和-O3编译运行结果竟然不一样深入说说Nest
C++ question公司高层要软件组接管我们的嵌入式软件
问个 C++到C的问题说说我以前做的ultra low latency架构吧
程序占用很大内存请大虾们推荐一本关于embedded real-time programming书
self-nested classC 和 C++ 相比有什么优点?
c++的高级的东东在实际项目开发中到底有没有很大的应用阿?C++和C#一起学可行吗
码工们干活的时候都在用什么IDE?python开发大型软件的可能性
相关话题的讨论汇总
话题: 重启话题: 文件话题: sync话题: flash话题: 系统
进入Programming版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
我们有个文件保存一些信息,有一些是重启之前产生的。系统是用flash memory,那么
,一般来讲,是不是写完之后还要什么sync,要不然怎么保证文件到flash里面呢?
好几次,我看到写已经发生了,但是重启后,文件里面没有。这里面有这么几个问题,
第一,写文件的函数结束后,文件写进去没有?在内存里,是同步还是异步的?
第二,到了电路板的flash memory里面了,然后重启,这个文件到底能不能完成对应的
电子的移动?因为重启了,这个时候如果正在写入,甚至擦除,不就没了吗?
有人说第二个情况,时间很短。那么,第一个是不是很长?有的时候写文件后5秒重启
,里面没有新写的东西。如果用sync,那么在C++里面怎么用?
s******e
发帖数: 3
2
调用一下 fsync 系统函数,或者设置一下打开文件的 sync io flags
c++ 不熟,十几年没玩c了,不保证正确。

【在 b***i 的大作中提到】
: 我们有个文件保存一些信息,有一些是重启之前产生的。系统是用flash memory,那么
: ,一般来讲,是不是写完之后还要什么sync,要不然怎么保证文件到flash里面呢?
: 好几次,我看到写已经发生了,但是重启后,文件里面没有。这里面有这么几个问题,
: 第一,写文件的函数结束后,文件写进去没有?在内存里,是同步还是异步的?
: 第二,到了电路板的flash memory里面了,然后重启,这个文件到底能不能完成对应的
: 电子的移动?因为重启了,这个时候如果正在写入,甚至擦除,不就没了吗?
: 有人说第二个情况,时间很短。那么,第一个是不是很长?有的时候写文件后5秒重启
: ,里面没有新写的东西。如果用sync,那么在C++里面怎么用?

g****t
发帖数: 31659
3
如果是MCU,
有的芯片或者电路板提供有axiom write什么的.也可以找厂家提供的例子程序。


: 调用一下 fsync 系统函数,或者设置一下打开文件的 sync io flags

: c 不熟,十几年没玩c了,不保证正确。



【在 s******e 的大作中提到】
: 调用一下 fsync 系统函数,或者设置一下打开文件的 sync io flags
: c++ 不熟,十几年没玩c了,不保证正确。

d***a
发帖数: 13752
4
C程序,有OS?如果是,在程序退出前调用fflush()函数,OS会保证程序退出之前或
系统重启之前,把所有数据写到存贮系统中。

【在 b***i 的大作中提到】
: 我们有个文件保存一些信息,有一些是重启之前产生的。系统是用flash memory,那么
: ,一般来讲,是不是写完之后还要什么sync,要不然怎么保证文件到flash里面呢?
: 好几次,我看到写已经发生了,但是重启后,文件里面没有。这里面有这么几个问题,
: 第一,写文件的函数结束后,文件写进去没有?在内存里,是同步还是异步的?
: 第二,到了电路板的flash memory里面了,然后重启,这个文件到底能不能完成对应的
: 电子的移动?因为重启了,这个时候如果正在写入,甚至擦除,不就没了吗?
: 有人说第二个情况,时间很短。那么,第一个是不是很长?有的时候写文件后5秒重启
: ,里面没有新写的东西。如果用sync,那么在C++里面怎么用?

n******t
发帖数: 4406
5
寫返回,取決你調什麼函數,在什麼層次上面調的?
C standard library? C syscall? C++? Python? 都不一樣。
不過寫文件結束之後,如果你的操作系統正常重啓(正常是說重啓前調了sync),你不應
該不會看見文件沒有改動。
至於你第二個問題,flash memory是ssd? 還是raw nand? 這些都會有影響。如果硬件
driver沒有問題,你在sync之後,即使重啓,也應該可以看到文件變了。
你這個感覺是嵌入式設備,那麼最先你應該看的是重啓時候,系統腳本是不是調用了
sync。

【在 b***i 的大作中提到】
: 我们有个文件保存一些信息,有一些是重启之前产生的。系统是用flash memory,那么
: ,一般来讲,是不是写完之后还要什么sync,要不然怎么保证文件到flash里面呢?
: 好几次,我看到写已经发生了,但是重启后,文件里面没有。这里面有这么几个问题,
: 第一,写文件的函数结束后,文件写进去没有?在内存里,是同步还是异步的?
: 第二,到了电路板的flash memory里面了,然后重启,这个文件到底能不能完成对应的
: 电子的移动?因为重启了,这个时候如果正在写入,甚至擦除,不就没了吗?
: 有人说第二个情况,时间很短。那么,第一个是不是很长?有的时候写文件后5秒重启
: ,里面没有新写的东西。如果用sync,那么在C++里面怎么用?

n******t
发帖数: 4406
6
這個做法是不對的。fflush()是C標準庫函數,只負責flush standard library流I/O的
buffer,還需要調用fsync()才能保證落盤。

那么
题,
应的
重启

【在 d***a 的大作中提到】
: C程序,有OS?如果是,在程序退出前调用fflush()函数,OS会保证程序退出之前或
: 系统重启之前,把所有数据写到存贮系统中。

d***a
发帖数: 13752
7
OS如果自己重启,会把I/O buffer的内容写回存贮设备的。不过,用fsync强制写一下
确实好一些,防止外部掉电的情况。

【在 n******t 的大作中提到】
: 這個做法是不對的。fflush()是C標準庫函數,只負責flush standard library流I/O的
: buffer,還需要調用fsync()才能保證落盤。
:
: 那么
: 题,
: 应的
: 重启

d***a
发帖数: 13752
8
Flash memory写入的时间可能会超过5秒。如果你说的重启是外部掉电后的重启,用纯
软件的方法,是不能保证的。简单的解决办法,是给系统加一个小的备用电池。如果系
统掉电了,备用电池保证OS能完成对存贮设备的写入。

【在 b***i 的大作中提到】
: 我们有个文件保存一些信息,有一些是重启之前产生的。系统是用flash memory,那么
: ,一般来讲,是不是写完之后还要什么sync,要不然怎么保证文件到flash里面呢?
: 好几次,我看到写已经发生了,但是重启后,文件里面没有。这里面有这么几个问题,
: 第一,写文件的函数结束后,文件写进去没有?在内存里,是同步还是异步的?
: 第二,到了电路板的flash memory里面了,然后重启,这个文件到底能不能完成对应的
: 电子的移动?因为重启了,这个时候如果正在写入,甚至擦除,不就没了吗?
: 有人说第二个情况,时间很短。那么,第一个是不是很长?有的时候写文件后5秒重启
: ,里面没有新写的东西。如果用sync,那么在C++里面怎么用?

n******t
发帖数: 4406
9
如果是embeded的soc,可能並沒有x86的reboot 過程,僅僅就是reset而已,並不會保
證數據落盤。

【在 d***a 的大作中提到】
: OS如果自己重启,会把I/O buffer的内容写回存贮设备的。不过,用fsync强制写一下
: 确实好一些,防止外部掉电的情况。

g****t
发帖数: 31659
10
如果是嵌入式,楼主要查说明书,或者联系公司找例子程序。有的芯片
有很tricky的掉电保护软硬件技术棧,我以前参与过此类项目。


: 如果是embeded的soc,可能並沒有x86的reboot 過程,僅僅就是reset而
已,並
不會保

: 證數據落盤。



【在 n******t 的大作中提到】
: 如果是embeded的soc,可能並沒有x86的reboot 過程,僅僅就是reset而已,並不會保
: 證數據落盤。

相关主题
c++的高级的东东在实际项目开发中到底有没有很大的应用阿?深入说说Nest
码工们干活的时候都在用什么IDE?公司高层要软件组接管我们的嵌入式软件
请推荐C++开发环境说说我以前做的ultra low latency架构吧
进入Programming版参与讨论
b***i
发帖数: 3043
11
大家说得都恨到点子上
现在发现,重启前代码没有调flush,虽然平时时不时调用,所以出现丢数据问题。系
统不是Linux,可能应该在系统里加上把内存所有的数据写道Flash磁盘?这个系统重启
的功能还在开发中,可能缺少功能。

【在 b***i 的大作中提到】
: 我们有个文件保存一些信息,有一些是重启之前产生的。系统是用flash memory,那么
: ,一般来讲,是不是写完之后还要什么sync,要不然怎么保证文件到flash里面呢?
: 好几次,我看到写已经发生了,但是重启后,文件里面没有。这里面有这么几个问题,
: 第一,写文件的函数结束后,文件写进去没有?在内存里,是同步还是异步的?
: 第二,到了电路板的flash memory里面了,然后重启,这个文件到底能不能完成对应的
: 电子的移动?因为重启了,这个时候如果正在写入,甚至擦除,不就没了吗?
: 有人说第二个情况,时间很短。那么,第一个是不是很长?有的时候写文件后5秒重启
: ,里面没有新写的东西。如果用sync,那么在C++里面怎么用?

g****t
发帖数: 31659
12
所有内存的都写flash没必要吧。你自己写个atomWrite(),关键数据调用下即可。

【在 b***i 的大作中提到】
: 大家说得都恨到点子上
: 现在发现,重启前代码没有调flush,虽然平时时不时调用,所以出现丢数据问题。系
: 统不是Linux,可能应该在系统里加上把内存所有的数据写道Flash磁盘?这个系统重启
: 的功能还在开发中,可能缺少功能。

n******t
发帖数: 4406
13
其實沒有OS保護,本來硬件上面這些東西實現就死和千變萬化的,都得看具體手冊來決
定。

【在 g****t 的大作中提到】
: 如果是嵌入式,楼主要查说明书,或者联系公司找例子程序。有的芯片
: 有很tricky的掉电保护软硬件技术棧,我以前参与过此类项目。
:
:
: 如果是embeded的soc,可能並沒有x86的reboot 過程,僅僅就是reset而
: 已,並
: 不會保
:
: 證數據落盤。
:

s******e
发帖数: 3
14
还记得大学时代玩SunOS,不用reboot,shutdown 关系统,发两个 sync,一个 halt
命令就行。
所有类unix系统都差不多,看看你们的系统关机重启是否做了同样的事情。

【在 b***i 的大作中提到】
: 大家说得都恨到点子上
: 现在发现,重启前代码没有调flush,虽然平时时不时调用,所以出现丢数据问题。系
: 统不是Linux,可能应该在系统里加上把内存所有的数据写道Flash磁盘?这个系统重启
: 的功能还在开发中,可能缺少功能。

g****t
发帖数: 31659
15
跟软件产品设计的思路差不多。芯片的
掉电系统保护这部分,可以卖卖feature,新建立几个buzz words 。或者旧瓶装新酒,
改一点。


: 其實沒有OS保護,本來硬件上面這些東西實現就死和千變萬化的,都得看
具體手
冊來決

: 定。



【在 n******t 的大作中提到】
: 其實沒有OS保護,本來硬件上面這些東西實現就死和千變萬化的,都得看具體手冊來決
: 定。

1 (共1页)
进入Programming版参与讨论
相关主题
语言真的不是那么重要,我的春运系统用java也可程序占用很大内存
用Java写一个简单的browserself-nested class
从一个Embedded C++ quiz 调查看印度人的实力c++的高级的东东在实际项目开发中到底有没有很大的应用阿?
C++学到什么程度能找到初级工作码工们干活的时候都在用什么IDE?
一个奇怪的问题请推荐C++开发环境
G++用-g和-O3编译运行结果竟然不一样深入说说Nest
C++ question公司高层要软件组接管我们的嵌入式软件
问个 C++到C的问题说说我以前做的ultra low latency架构吧
相关话题的讨论汇总
话题: 重启话题: 文件话题: sync话题: flash话题: 系统