Pregunta sobre la posición de archivos en busca de
Pregunta
Mi pregunta anterior es sobre la lectura de datos en bruto y la escritura, pero un nuevo problema arised, parece que no hay fin ....
La pregunta es: los parámetros de las funciones como lseek()
o fseek()
son los 4 bytes. Si quiero que pasemos un lapso de más de 4G, esto es imposible. Sé que en Win32, hay una SetPointer(...,Hign, Low,....)
función, esta punteros pueden generar 64 punteros de bytes, que es lo que quiero.
Pero si quiero crear una aplicación en Linux o Unix (crear un archivo o escribir directamente los sectores del disco en bruto), ¿Cómo se mueven a un puntero sobre 4G?
Gracias, espera de sus respuestas ...
Solución
El parámetro de desplazamiento de lseek
es de tipo off_t
. En los entornos de compilación de 32 bits, este tipo por defecto es un entero de 32 bits - sin embargo, si se compila con esta macro definidos antes de que todo sistema incluye:
#define _FILE_OFFSET_BITS 64
... entonces off_t
será un tipo con signo de 64 bits.
Para fseek
, la función fseeko
es idéntico excepto que utiliza el tipo off_t
para el desplazamiento, que permite que la solución anterior para trabajar con él también.
Otros consejos
un entero sin signo de 4 bytes puede representar un valor de hasta 4294967295, lo que significa que si usted quiere mover más de 4G, es necesario utilizar lseek64 (). Además, puede utilizar fgetpos () y fsetpos () para cambiar la posición en el archivo.
En Windows, utilice _lseeki64()
, en Linux, lseek64()
.
Te recomiendo usar lseek64()
en ambos sistemas al hacer algo como esto:
#ifdef _WIN32
#include <io.h>
#define lseek64 _lseeki64
#else
#include <unistd.h>
#endif
Eso es todo lo que necesita.