Sé que puedo obtener el tamaño de archivo de FILE *
por fseek
, pero lo que tengo es solo un fd INT.¿Cómo se obtiene el tamaño del archivo por fd?
¿Cómo puedo obtener el tamaño de archivo en este caso?
Sé que puedo obtener el tamaño de archivo de FILE *
por fseek
, pero lo que tengo es solo un fd INT.¿Cómo se obtiene el tamaño del archivo por fd?
¿Cómo puedo obtener el tamaño de archivo en este caso?
Puede utilizar lseek
con SEEK_END
como el origen, ya que devuelve el nuevo desplazamiento en el fichero, por ejemplo.
off_t fsize;
fsize = lseek(fd, 0, SEEK_END);
Creo que será bueno mencionar que es una buena idea retroceder el "puntero" de lectura/escritura ya que es posible que no se pueda leer después de esto. – gubble
fstat funcionará. Pero no estoy exactamente seguro de cómo planeas obtener el tamaño del archivo a través de fseek a menos que también uses ftell (por ejemplo, fseek hasta el final, y luego digas dónde estás). fstat es mejor, incluso para FILE, ya que puede obtener el descriptor de archivo desde el controlador FILE (a través de fileno).
stat, fstat, lstat - get file status
int fstat(int fd, struct stat *buf);
struct stat {
…
off_t st_size; /* total size, in bytes */
…
};
me gusta escribir mis ejemplos de código como funciones para que estén listos para cortar y pegarlo en el código:
int fileSize(int fd) {
struct stat s;
if (fstat(fd, &s) == -1) {
int saveErrno = errno;
fprintf(stderr, "fstat(%d) returned errno=%d.", fd, saveErrno);
return(-1);
}
return(s.st_size);
}
Try [ 'fdopen'] (http://pubs.opengroup.org /onlinepubs/9699919799/functions/fdopen.html) para obtener un 'FILE *' de un descriptor de archivo. – pmg
AFAIR C (es decir, la biblioteca C) no sabe nada sobre los descriptores de archivos. Por favor, sea más preciso en su pregunta y sus etiquetas. –