Если вы хотите придерживаться стандартных интерфейсов ISO C, используйте fgetpos()
и fsetpos()
. Однако эти функции полезны только для сохранения файловой позиции и возврата к той же позиции позже. Они представляют позицию, используя тип fpos_t
, который не обязательно должен быть целочисленным типом данных. Например, в системе на основе записей это может быть структура, содержащая номер записи и смещение в записи. Это может быть слишком ограничивающим.
POSIX определяет функции ftello()
и fseeko()
, которые представляют позицию с использованием типа off_t
. Это должен быть целочисленный тип, а значение - это смещение в байтах от начала файла. Вы можете выполнить арифметику и использовать fseeko()
для выполнения относительного поиска. Это будет работать в Linux и других системах POSIX.
Кроме того, скомпилируйте с -D_FILE_OFFSET_BITS=64
(Linux / Solaris). Это определит off_t
как 64-битный тип (то есть off64_t
) вместо long
и переопределит функции, которые используют смещения файлов, чтобы быть версиями, которые принимают 64-битные смещения. Это значение по умолчанию при компиляции для 64-битной системы, поэтому в этом случае нет необходимости.