打印

硬盘空间大着呢。fwrite为什么出错?

[复制链接]
3798|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ysdx|  楼主 | 2010-5-20 16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PCI板卡接收通讯数据,每秒20M字节左右。用7200转的硬盘保存。调用的是fwrite。发现在不同的机器上都出现fwrite出错。研华的工控机一般在写到几个G后出错。惠普的商用机器一般在40~55G后出错。有点纳闷。为什么啊?不至于20M字节的速度也没有吧?

相关帖子

沙发
yxwsz| | 2010-5-20 21:26 | 只看该作者
1 单独一个文件写了那么多数据之后出错,还是说写了很多文件后,总大小超过几个G之后出错?
   如果文件系统是FAT32, 单个文件大小是不能超过2G的; NTFS则没有这个限制;

2 你使用的电脑是什么芯片组?
   比较老的电脑, 硬盘是ATA接口, ATA接口速度本来就慢, ATA 100, 再加上OS的文件系统,实际用户能够使用到的带宽肯定达不到100MByte/s;

   建议你使用一个服务器(服务器的架构和PC机的架构不一样,其磁盘系统和通讯系统的性能比PC机高的多)或者具有SATA硬盘接口的性能高一点的PC机来测试;

使用特权

评论回复
板凳
ysdx|  楼主 | 2010-5-21 12:11 | 只看该作者
XP系统 NTFS sata硬盘。7200转、5600转都测试过。单个文件到几G或者40~50G就出错。调试发现是fwrite函数返回的字节数和要写入的不一致。每次调用fwrite后都调用fflush了。搞不明白这个是为什么。

使用特权

评论回复
地板
huangqi412| | 2010-5-21 12:35 | 只看该作者
:funk:   单文件几十个G最好别这么玩,   出点小意外全部数据OVER.

使用特权

评论回复
5
mohanwei| | 2010-5-21 12:58 | 只看该作者
你应该这样做:在内存中开辟一块环形缓冲区,PCI驱动只管往缓冲区写;外面使用一个工作线程从缓冲区里读,并写入到硬盘里。

使用特权

评论回复
6
mohanwei| | 2010-5-21 13:00 | 只看该作者
fflush不要随便用……交给文件系统来管理就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:新手死于追涨,老手死于抄底,高手死于杠杆,价值投资死于满仓死杠!

338

主题

1055

帖子

21

粉丝