关于fread()函数的诡异行为,请大牛们指教,该怎么处理

关于fread()函数的诡异行为,请大牛们指教
在vs2005中编译的代码,大概结构如下:
FILE *fp;

for (;;)
{
...
fread(buf, sizeof(char), 1024, fp);
}

读文件的循环不在主线程中。
但不过程,发现 ftell(fp) 得到的文件指针按照预期往后移,但是fp中的_fp指针始终不变,_base指针跟着文件指针往后移。结果是每次写入buf的内容都是第一次进入循环后读到的内容。

请问有人碰到过类似情况吗?有可能是什么原因造成的?
另外FILE 类中的_fp/_base成员变量是什么意思?


------解决方案--------------------
每个线程都用自己 fopen返回的fp,而不共用一个.
试试?
------解决方案--------------------
人家缓存的,读一次100KB,你每次就要10K,当然不需要移什么指针了。

楼主定然没有检查fread返回值,人家一直返回EOF, 你还以为它给你的buffer里放数据了,其实一直都是第一次成功fread返回的那些数据。
------解决方案--------------------
标准C的环境假设是单线程环境。
关于多线程,我不知道。
------解决方案--------------------
探讨
搞定了,每次调用 fread 之后都调用 fflush 刷一次缓冲。但是以前也没有这么严格的要求,系统自动完成了存储区的管理,难道真的因为线程的原因?
参考了[url=http://book.csdn.net/bookfiles/1017/100101730952.shtml]fread的实现。
具体原因还没想清楚,想清楚了再回来。

------解决方案--------------------
探讨
引用:
搞定了,每次调用 fread 之后都调用 fflush 刷一次缓冲。但是以前也没有这么严格的要求,系统自动完成了存储区的管理,难道真的因为线程的原因?
参考了[url=http://book.csdn.net/bookfiles/1017/100101730952.shtml]fread的实现。
具体原因还没想清楚,想清楚了再回来。

fflush是给标准输出用……