免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2644 | 回复: 5

对fread的一个疑问 [复制链接]

论坛徽章:
0
发表于 2008-02-21 12:50 |显示全部楼层
刚刚看到一位网友的对于fwrite的问题, 我在测试的时候遇到如下问题, 望各位指教. 谢谢!

在windows下
对于如下的代码, 我在fwrite之后, 再调用fread, 如果是加了rewind的话, 则可以正常地读出这个文件的内容, 但是如果我不加rewind的话, 按道理现在已经是在文件的末尾了, 但是fread也会继续运行, 并且会在文件末尾不断地添加十六进制的CD.

如果是在linux下, 则不会出现这种情况.

请教各位是怎么回事. 谢谢!


  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>

  4. int main()
  5. {
  6.         FILE *fp;
  7.         char ch = 1;
  8.         char buf[10] = "123";
  9.         int n;

  10.         if ((fp = fopen("./Debug/fseek2.txt", "w+")) == NULL)
  11.         {
  12.                 printf("fopen error\n");
  13.                 exit(1);
  14.         }
  15.        
  16.         n = fwrite(buf, 1, strlen(buf), fp);
  17.        

  18.         printf("n = %d\n", n);
  19.         printf("ftell:%d\n", ftell(fp));

  20.         rewind(fp);

  21.         while (fread(&ch, 1, 1, fp) == 1)
  22.         {
  23.                 printf("ch = %d\n", ch);
  24.         }
  25.        
  26.         printf("out of while\n");

  27.         if (feof(fp))
  28.                 printf("end of file\n");

  29.         printf("ch1 = %d\n", ch);

  30.         return 0;
  31. }

复制代码

论坛徽章:
0
发表于 2008-02-21 13:07 |显示全部楼层
我告诉你,把 rewind(fp); 替换为 fflush(fp); 强行把缓冲数据写入文件,指针位置就正常了。
linux 就不用这么做,Windows得需要,我认为i这是Windows的BUG。

论坛徽章:
0
发表于 2008-02-21 13:10 |显示全部楼层
原帖由 tgbvc 于 2008-2-21 13:07 发表
我告诉你,把 rewind(fp); 替换为 fflush(fp); 强行把缓冲数据写入文件,指针位置就正常了。
linux 就不用这么做,Windows得需要,我认为i这是Windows的BUG。


哦, 谢谢, 我明白了, 是缓冲的问题.

BTW: 你如果认为这是windows的BUG的话你可以给微软发邮件, 还可以得一大笔钱.

论坛徽章:
0
发表于 2008-02-21 13:12 |显示全部楼层
原帖由 tgbvc 于 2008-2-21 13:07 发表
我告诉你,把 rewind(fp); 替换为 fflush(fp); 强行把缓冲数据写入文件,指针位置就正常了。
linux 就不用这么做,Windows得需要,我认为i这是Windows的BUG。

赶紧改行吧

论坛徽章:
0
发表于 2008-02-21 13:13 |显示全部楼层
原帖由 deepinthesea 于 2008-2-21 13:10 发表


哦, 谢谢, 我明白了, 是缓冲的问题.

BTW: 你如果认为这是windows的BUG的话你可以给微软发邮件, 还可以得一大笔钱.


这笔钱我不要了,让别人偷摸去挣去吧。

论坛徽章:
0
发表于 2008-02-21 13:18 |显示全部楼层
在Windows里,实际上,rewind 和 fseek里都执行了 fflush 动作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP