免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2949 | 回复: 3
打印 上一主题 下一主题

[C++] ofstream缓冲区内容被写成0x00 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-13 18:18 |只看该作者 |倒序浏览
rt,一个将crc校验值写入.crc文件的操作(这个应该没什么关系,纯活跃气氛)。
在一个内联函数中使用ofstream写值,写完没有显式close(),但是下一行ofstream对象作用域就到头了。大概形式是 out<< (unsigned int) value,所以可以排除值本身为0的因素。
写文件每分钟一次。
程序运行中随机断电,有大约1/5的几率机器启动后.crc文件中的值变为8个0x00(字节数正确)。

场景还原得比较烂,而且估计也没什么参考价值,我主要是想问:
ofstream对象的文件缓冲区被置0x00,有什么常见原因吗?

谢谢进贴。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2013-11-14 11:06 |只看该作者
随时断电的场景就不能这么多, 必须是写临时文件后rename上去,并且对于客户端来说重要业务一定要写redo-log。

论坛徽章:
0
3 [报告]
发表于 2013-11-14 11:41 |只看该作者
linux_c_py_php 发表于 2013-11-14 11:06
随时断电的场景就不能这么, 必须是写临时文件后rename上去,并且对于客户端来说重要业务一定要写redo-lo ...


是说不能这么做吧?确实,准备改了。
原因方面,我又写了个只做文件IO的测试程序,一样会发生这个问题,看来跟逻辑没关系,纯属运行库的行为,只能查到这了。
文件句柄都关闭了还这样,略恶心啊。
谢谢回复

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
4 [报告]
发表于 2013-11-14 13:42 |只看该作者
回复 3# dooqaqa


    要Flush了才算, Close了不算的。
试试将OF的BUFFER设为NULL。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP