- 主题:请教一个ofstream的flush问题
你需要了解fstream、操作系统甚至硬盘是如何写存储的
flush是从fstream的buf刷到操作系统的page里
page是有cache的,操作系统会根据策略写到硬盘里,sync可以强制写硬盘
实质上硬盘内部也是有cache的,sync后断电依然有可能丢失数据
【 在 fishingriver (fishingriver) 的大作中提到: 】
: 我发现ofstream写文本时,即使加上flush,也不会立刻把数据写到文本文件里
: 文件close都执行完一段时间了,数据才会写完。
: 如果我想close返回时就写完,应该怎么做呢?
: ...................
--
FROM 115.171.245.*
这肯定是你程序的bug了
page cache是操作系统层面的,对应用是透明的
【 在 fishingriver 的大作中提到: 】
: 谢谢大家,问题还没解决,请再支支招。
: 我现在的问题是这样的:
: (1)我的程序里会产生数据,然后把数据以文本文件的方式写到硬盘上,然后我通知另一个人的程序,把数据读走。
: ...................
--
FROM 115.171.108.*
【 在 fishingriver 的大作中提到: 】
: 多谢回复,这样的话,就是说只要我写完,他就可以读了。
: 我之前没把我的应用讲清楚,是这样的:
: (1)对方并不在本地开打和读写我的文件,他会用把我写好的文件传到服务器上。这种情况,是不是我也可以在我close之后,立刻通知他,他就可以立刻上传了?
他不在本地打开读,怎么上传?
: (2)他上传我产生的数据,是不是也得先把数据弄到缓存里才能上传,而我写的数据已经在缓存里了,这个缓存对于我的程序和他的程序都是透明可以访问的,所以我一close,他就可以上传了?
只要机器不掉电,缓存就是透明的,不用关心。不过还是建议你去研究一下操作系统的文件系统部分
: (3)我有的时候需要写好几个文件,然后再通知他。我发现有时我写完最后一个文件都close了,但之前还有几个文件,名字都没出现在硬盘上。得过一阵子文件才会开始出现在硬盘上。这种情况我也可以写完最后一个文件并且close之后(这时还有几个文件没出现在硬盘上),就可以通知
: 他了吗?
肯定是你的程序bug了
--
FROM 106.38.162.*
【 在 fishingriver 的大作中提到: 】
: (1)他如果在上传前想把我生成的几个文件打包压缩一下,不是直接上传,是不是打包操作也得先读我的文件?
当然,不读怎么打包?
: (2)这块好像不是bug,我的几个文件,比如文件1到文件6,都能生成,但最后一个写完close之后,不是每个文件名都立刻出现在硬盘上,但最后经过若干时间之后,还是会出现在硬盘上的。
没听说过有这样的事情,创建成功就能看到。你写个最简单的程序,就创建几个文件写验证一下。
: (3)对于写文本文件而言,ofstream是不是比较慢的,有明显更快的方式吗?
不慢
--
FROM 106.38.162.*