我的函數接收一個文件(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上的結構)。 –