Necesito acceder a un archivo de más de 2 gb utilizando C. Durante una ejecución del programa, se leerá un número variable de bytes del archivo y se guardará la ubicación de la siguiente posición. Durante la siguiente ejecución del programa, se lee la posición del archivo y se leen una cantidad de bytes a partir de esa ubicación.Acceso a archivos grandes En C
La complicación es que ocasionalmente el archivo puede 'comprimirse' copiándolo en un nuevo archivo, menos cualquier byte que ya haya sido leído (creo que copiar es la única manera de hacerlo). El número de bytes eliminados de esta manera también se guardará.
Necesito conocer la posición actual del archivo desde el inicio original para sincronizar con otro archivo. Esto debería ser fácil porque es justo (current_offset + deleted_bytes).
La razón por la que no es fácil es que fseek solo usa índices int largos que limitan el archivo a 2gb y fsetpos utiliza una estructura fpos_t para el índice de posición, que no es un número y no puede convertirse de atrás hacia adelante a uno. No conozco ninguna forma de usar un índice int largo largo para el posicionamiento de archivos, que sería la solución ideal.
¿Qué debo hacer?
¿Qué plataforma? 'ftello()' y 'fseeko()' podrían ser una opción. –
ftello y fseeko cumplirán con POSIX.1, pero el> 2GB también es un problema dependiente del sistema de archivos. –