免费注册 查看新帖 |

Chinaunix

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

[函数] fwrite函数在写文件时老是少些几个byte(多数情况下是少写一个byte) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-05 08:59 |只看该作者 |倒序浏览
我的程序是这样的思路:
先是从串口读数据(每次串口数据读的大小设置为100),每次串口读的数据都放到一个缓冲区里面,然后再从缓冲区里面将数据由fwrite函数写到一个文本文件里面。用函数直观表示是这样:read串口--->缓冲区(字符数组)-->fwrite(将字符数组里面的内容写到一个文件里面)

问题是:fwrite函数在写文件的时候老是少写一个或者多个(多数情况下是少写一个),操作20次的话有大概10次左右都会这样,不知道是什么原因?

论坛徽章:
0
2 [报告]
发表于 2010-01-05 09:15 |只看该作者
确定是系统API的问题?如果确定了就换一个函数写啊,像write,pwrite,如果还写得不对,那就是别的地方的问题了

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2010-01-05 09:16 |只看该作者
你怎么判断少写了?打开文件看?看的时候文件fflush或者关闭了么

论坛徽章:
0
4 [报告]
发表于 2010-01-05 09:55 |只看该作者
fwrite()将缓冲区的数据写入文件,当然你可以指定写入的字节数,但是如果缓冲区没有那么多的数据,它当然只写入能写的,并返回实际写入的字节数。
我感觉,你应该检查一下你的串口数据缓冲区

论坛徽章:
0
5 [报告]
发表于 2010-01-05 10:30 |只看该作者
函数是无罪的...  看用的人!
首先打印下你读数据时的返回值,看是不是读到了100,写的时候也查看下返回值!!    至于文件里你如何查看的缺少了文件?
tail -f的话有没有fflush(fp)...    or fclose(fp)...

论坛徽章:
0
6 [报告]
发表于 2010-01-05 14:00 |只看该作者
原帖由 girlbird 于 2010-1-5 08:59 发表
我的程序是这样的思路:
先是从串口读数据(每次串口数据读的大小设置为100),每次串口读的数据都放到一个缓冲区里面,然后再从缓冲区里面将数据由fwrite函数写到一个文本文件里面。用函数直观表示是这样:re ...


看看你的 fopen 参数吧。
猜测是没有使用 binary 的方式打开。

论坛徽章:
0
7 [报告]
发表于 2010-01-05 17:52 |只看该作者
原帖由 iunknown 于 2010-1-5 14:00 发表


看看你的 fopen 参数吧。
猜测是没有使用 binary 的方式打开。

恩  也有可能  加个b看看

论坛徽章:
0
8 [报告]
发表于 2010-01-05 17:55 |只看该作者
刷新流

fflush
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP