2012-07-07 7 views
8

voglio ottenere la data dell'ultima modifica di un file in C. Quasi tutte le fonti che ho trovato impiego qualcosa seguendo questo frammento:Ottenere la data dell'ultima modifica di un file in C

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

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

    return asctime(clock); 
} 

Ma la attr doesn' t hanno anche un campo st_mtime, solo st_mtimespec. Tuttavia, quando uso questo mio Eclipse mi dice che passing argument 1 of 'gmtime' from incompatible pointer type sulla linea clock = gmtime(&(attr.st_mtimespec));

Cosa sto facendo male?

PS: sto sviluppando su OSX Snow Leopard, Eclipse CDT e l'utilizzo di GCC come compilatore multipiattaforma

+0

Sì, altrimenti 'stat' non sarebbe disponibile. –

+1

Sebbene OT: non si vuole memorizzare il riferimento restituito da 'get_last_modified()' no? 'asctime()' restituisce un riferimento alla memoria statica, il cui contenuto verrà sovrascritto su ogni chiamata successiva ad esso. – alk

+0

Si chiama solo una volta, ma lo terrò a mente se dovesse mai cambiare :) –

risposta

5

Su OS X, st_mtimespec.tv_sec è l'equivalente di st_mtime.

per rendere questo portatile, fare

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

e quindi utilizzare st_mtime.

+0

C'è un modo per fare questo compilatore incrociato? Il programma deve essere eseguito su Ubuntu senza avvisi ed errori, ma non ho una VM da programmare su ... –

+0

Vedere la risposta modificata. – mpartel

+0

Ora mi dice che 'Field 'tv_sec' non può essere risolto' –

Problemi correlati