2011-02-23 7 views
11

Voglio scrivere un programma in C per visualizzare il tempo dell'ultima modifica del file in microsecondi o millisecondi. Come potrei fare? Potresti darmi un aiuto?Come visualizzare l'ora dell'ultima modifica del file su linux

Grazie mille.

+1

Solo per curiosità, Perchè ti serve? – Alphaneo

+0

@ Alphaneo: In effetti, voglio visualizzare tutti i file dell'ultima modifica in una determinata directory. In base a ciò, posso ordinare i miei file. thx – JavaMobile

risposta

11

La funzione stat(). In sufficientemente versioni recenti di glibc, st_mtim (nota: nessuna finale e) è un campo di tipo struct timespec che contiene la data di modifica del file:

struct stat st; 

if (stat(filename, &st)) { 
    perror(filename); 
} else { 
    printf("%s: mtime = %lld.%.9ld\n", filename, (long long)st.st_mtim.tv_sec, st.st_mtim.tv_nsec); 
} 

Si dovrebbe verificare la presenza di st_mtim in struct stat nel vostro sistema di compilazione, ed essere pronti a tornare a st_mtime (che ha tipo time_t, e solo una risoluzione di 1 secondo) se non è presente.

+0

Grazie mille. È meraviglioso. Ma l'output è disordine, è possibile ordinarli in base ai nomi dei file? – JavaMobile

+0

@JavaMobile: Sure - metti puntatori ai nomi dei file in una matrice e ordinali, quindi corri attraverso quella matrice e chiama 'stat()'. – caf

4

È possibile utilizzare la funzione stat(), restituirà struct stat che contiene il tempo dell'ultima modifica di un file. Ecco la pagina man http://linux.die.net/man/2/stat. Per quanto riguarda la precisione, dipende dal fatto che il tuo file system supporti il ​​timestamp al secondo o meno.

+0

E 'possibile ottenere il tempo nell'intervallo Milli o Microsecond usando stat ... Non temo;) – Alphaneo

+2

@Alphaneo: Ho guardato quella pagina Web e dice che 'stat' restituisce tempi con precisione in nanosecondi. –

+0

Sì, stat() su Linux ha campi aggiuntivi per aggiungere una risoluzione di nanosecondi, dal kernel 2.5.48. Tuttavia, come sottolinea @ZelluX, accuratezza! = Precisione - dipende davvero da cosa supporta il filesystem. – payne

0

Per completare le risposte Andrew e ZelluX.
La limitazione è nel file system. Per Linux ext3 è comunemente usato, e si può vedere in Wikipedia: viene utilizzato

Date resolution 1s 
1

JFS, XFS, ext4 e Btrfs supportano i timestamp in nanosecondi.

Il libro "L'interfaccia di programmazione di Linux" di Michael Kerrisk ha una buona sezione su File attributi

Problemi correlati