Longitud de fichero

drukan
20 de Octubre del 2005
Hola, como podria obtener la longitud de un fichero sin usar el puntero a fichero (FILE* ), ya que es para unix creo que hay una funcion que ya te mira la longitud del fichero con el identificador del fichero que no es de la libreria estandar sino de unix.
Para situar el tema, cuando yo creo un fichero lo ago con:
open("fichero",O_RDWR | O_CREAT,permisos);
write("fichero",cadena,longitud);

Y quiero conocer la longitud de lo que escrivo, se que se puede hacer moviendo el puntero a la ultima posicion, pero prefiero conocer la instruccion que seguro q la hay.

Hasta luego.

hiei
20 de Octubre del 2005
Se me ocurre lo siguiente:
int filez( int fd ) {
long posold = lseek( fd, 0, SEEK_CUR ); // Tomar posicion actual
long len = lseek( fd, 0, SEEK_END ); // Pocicionarse al final
lseek( fd, posold, SEEK_SET ); // Restaurar pocicion
return len;
}

Bueno, esto esta hecho, con el lseek que segun http://www.die.net/doc/linux/man/man2/lseek.2.html comple con los siguientes estandares UNIX (sin usar la libc, de echo usa las syscall):

CONFORMING TO
SVr4, POSIX, BSD 4.3

lseek devuelve la pocicion en la que deja el cursor del archivo, por eso se puede obtener la pocicion actual del archivo con:
long posold = lseek( fd, 0, SEEK_CUR );
Que es un desplasamiento de 0 bytes (nada) desde la pocicion actual, y nos retorna la pocicion (relativa al inicio del fichero) donde nos deja (en el mismo lugar donde estabamos porque el desplazamiento es 0)
Bueno, lo demas, es simple...