Programación General > C/C++
fseek
su -:
--- Cita de: "Eternal Idol" ---¿Pero stat no es capaz de devolver el tamaño de un archivo de mas de 4GB, verdad?
--- Fin de la cita ---
Si estas en una maquina de 64 bits, si que puede... en 32 bits se supone que tambien, no se si en el Glibc actual arreglaron el problema, pero aqui lo documentan muy bien.
--- Cita de: "Eternal Idol" ---Si no hay funcion standard entonces da lo mismo usar un servicio de un S.O. en particular (ademas que estos suelen ser mas potentes y con #ifdef se soluciona cualquier problema de portabilidad del codigo).
--- Fin de la cita ---
Me explique mal :nosweat:
stat si es estandar, pero stat64 no lo es.
Eternal Idol:
--- Cita de: "su -" ---Si estas en una maquina de 64 bits, si que puede... en 32 bits se supone que tambien, no se si en el Glibc actual arreglaron el problema, pero aqui lo documentan muy bien.
--- Fin de la cita ---
Si, pero en una de 32 bits no, el standard no lo soporta. Ahi lo que documentan es la API que tiene las funciones esas que terminan en 64 (ftello64 por ejemplo esta mencionada) pero no son standard.
--- Cita de: "su -" ---Me explique mal :nosweat:
stat si es estandar, pero stat64 no lo es.
--- Fin de la cita ---
Exacto, no hay funcion standard que te sirva para obtener el tamaño de un archivo de mas de 4GB en un Windows o GNULinux de 32 bits, de una manera u otra tenes que recurrir a funciones no standard (VC++ soporta _stat64 por cierto, con guion bajo por no ser standard).
maxstepin:
--- Cita de: "Eternal Idol" ---Exacto, no hay funcion standard que te sirva para obtener el tamaño de un archivo de mas de 4GB en un Windows o GNULinux de 32 bits, de una manera u otra tenes que recurrir a funciones no standard (VC++ soporta _stat64 por cierto, con guion bajo por no ser standard).
--- Fin de la cita ---
Pero el fichero <sys/stat.h> existe en la carpeta include de Mingw, quiero decir que no me lo he bajado de ningun sitio. SI viene de serie con el compilador, no es una libreria estandar?
en dicho fichero de cabecera esta declarado el prototipo de la funcion stat64.
--- Código: C ---_CRTIMP int __cdecl __MINGW_NOTHROW _stat64 (const char*, struct __stat64*); stat(), si que he podido usarla, y en archivos de mas de 4 GB no funciona, hay desboramiento de memoria.
Si compilo esta version:
--- Código: C --- #include <stdio.h>#include <sys/stat.h> /* Para la estructura stat */#include <unistd.h> main(int argc, char **argv){ struct stat64 buf; printf("%sn",argv[1]); if ( stat64(argv[1], &buf) == -1 ) { perror(argv[1]); getchar(); exit(-1); } else { printf("Tamaño del archivo %s %d bytes.n",argv[1],buf.st_size); } getchar();} Me tira este error:
+statmain.c|66|error: storage size of 'buf' isn't known|
Eternal Idol:
No, no es standard, supongo que es parte de esa API que menciono su- y MinGW tiene la costumbre de usar la CRT del VC++.
En la MSDN.
No logro que haga el enlazado pero asi deberia compilar:
--- Código: C++ ---struct __stat64 buf;
maxstepin:
todo lo hago desde el ide.
he probado "struct __stat64" sin resultados satisfactorios
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa