日期:2014-05-16  浏览次数:20580 次

fseek getc关于 当前指针问题
假如我在之前使用了fread函数,然后使用fseek函数将当前指针后移一个字节,然后不用fclose,直接调用getc去读取文件,那么当前指针会在哪啊?我是菜鸟,不知道描述的有没有问题啊,大家帮忙啊,发了几个帖子了,没分了

------解决方案--------------------
你fread返回5, 那么移动一下就是6.

要看fread的返回值,因为fread->read, 假设你fread(5),fread返回5,但实际read了可能10,FILE里还buffer了5,实际上FILE里记录的offset和当前fd的offset不同,fseek使用的是FILE里的offset,也就是5,而fd的offset是10.

这是实现方面的东西,理解了底层实现就容易理解了。
------解决方案--------------------
楼上说的很详细了。只针对问题,在libc(标准c库)里,一般读写文件用到FILE *fp;这样的文件指针,当用户读取内容时,C库会维护一个偏移,也就是你实际读出的字节数。所以如果顺便读取的话,没有必要去用fseek的,如果没有fclose,一直往下读即可。