fgetpos () идет вместе с fsetpos (). И ftell () идет вместе с fseek ().
fgetpos () выглядит практически как ftell (), потому что оба принимают параметр FILE *, и оба возвращают какую-то позицию в файле, хотя и с немного другим стилем. Но получите следующее: ТОЛЬКО fseek () позволяет искать с начала файла, с текущей позиции в файле и обратно с конца файла (третий аргумент для fseek () - SEEK_SET, SEEK_CUR и SEEK_END. ). fsetpos () не делает этого. Функция fsetpos () ограничена возвратом к той позиции, которую вы получили из fgetpos ().
Допустим, вы хотите прочитать файл в память. Сколько кучи вам нужно от malloc ()? Вам нужен размер файла. И мне еще предстоит найти какую-либо функцию в стандартной библиотеке C, которая сообщит вам размер файла, хотя некоторые компиляторы C могут добавить нестандартную функцию. Например, Borland Turbo C имеет длину файла (). Но я не видел filelength () среди стандартной библиотеки C.
Итак, вы можете использовать fseek () для 0 байтов перед END файла. Затем используйте ftell (), чтобы получить позицию в байтах, и основывайте свои вычисления для объема памяти кучи на этом.
Что еще можно сделать, чтобы получить размер файла? Вы можете использовать fgetc () для чтения каждого символа, считая до конца. Но я думаю, что использовать fseek () и ftell () лучше и проще.