2012-07-07 23 views
8

Quiero conseguir la última fecha de modificación de un archivo en C Casi todas las fuentes que encontré uso algo a lo largo de este fragmento:Obtener la última fecha de modificación de un archivo en C

char *get_last_modified(char *file) { 
    struct tm *clock; 
    struct stat attr; 

    stat(file, &attr); 
    clock = gmtime(&(attr.st_mtime)); 

    return asctime(clock); 
} 

Pero el attr doesn' t incluso tiene un campo st_mtime, solo st_mtimespec. Sin embargo, al usar esto, mi Eclipse me dice que passing argument 1 of 'gmtime' from incompatible pointer type en la línea clock = gmtime(&(attr.st_mtimespec));

¿Qué estoy haciendo mal?

PS: Estoy desarrollando en OSX Snow Leopard, Eclipse CDT y el uso de GCC como compilador multiplataforma de

+0

Sí, de lo contrario 'stat' en sí no estaría disponible. –

+1

Aunque OT: no desea almacenar la referencia devuelta por 'get_last_modified()' ¿verdad? 'asctime()' devuelve una referencia a la memoria estática, cuyo contenido se sobrescribirá en cada llamada sucesiva. – alk

+0

Solo se llama una vez, pero lo tendré en cuenta si alguna vez cambia :) –

Respuesta

5

En OS X, st_mtimespec.tv_sec es el equivalente de st_mtime.

para hacer de este portátil, hacer

#ifdef __APPLE__ 
#ifndef st_mtime 
#define st_mtime st_mtimespec.tv_sec 
#endif 
#endif 

y luego utilice st_mtime.

+0

¿Hay alguna manera de hacer este compilador cruzado? El programa tiene que ejecutarse en Ubuntu sin advertencias y errores, pero no tengo una VM para programar en ... –

+0

Consulte la respuesta editada. – mpartel

+0

Ahora me dice que 'Field 'tv_sec' no se pudo resolver' –

Cuestiones relacionadas