我的函数接收一个文件(FILE * f),该文件已经被读取,直到某个位置(未知的字节数)。在我的函数中,我也读了一些东西,所以位置指针改变了,但是在函数的结尾我想把它放在原来的位置,所以下一次读取将从我接收文件的位置开始。检索文件指针到原始位置
我知道,与FSEEK我可以带指针到哪里我想要的,但问题是,我不知道这是原来的位置...
例: file.txt的=>“ ABCDEFGHIJKLMOPQRSTUVWXYZ“
有人读取前3个字符,所以我的函数接收到指向D的文件。我读了4个字符并对它们做了任何事情,所以现在的位置是H,但我希望它取回到D.
如果你知道你读了多少字节,你可以做一个相对回溯多个字节来恢复位置。 –
'ftell()'是报告位置的标准函数,但它有局限性。为新的代码使用新的标准'fgetpos()'。 – chux
['ftell()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftell.html)被定义为返回'long';在具有大文件支持的32位系统上,这不够好。现代功能是 ['fgetpos()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgetpos.html)和 ['fsetpos()'](http://pubs.opengroup .org/onlinepubs/9699919799/functions/fsetpos.html),但缺点是你不能对'fpos_t'值进行算术(以标准方式)。它们可以是结构类型,不一定是算术类型(并且是Solaris 7,IIRC上的结构)。 –