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.
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.
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.
Grazie mille. È meraviglioso. Ma l'output è disordine, è possibile ordinarli in base ai nomi dei file? – JavaMobile
@JavaMobile: Sure - metti puntatori ai nomi dei file in una matrice e ordinali, quindi corri attraverso quella matrice e chiama 'stat()'. – caf
È 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.
E 'possibile ottenere il tempo nell'intervallo Milli o Microsecond usando stat ... Non temo;) – Alphaneo
@Alphaneo: Ho guardato quella pagina Web e dice che 'stat' restituisce tempi con precisione in nanosecondi. –
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
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
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
C'è un comando stat, che si può usare direttamente
http://www.thegeekstuff.com/2009/07/unix-stat-command-how-to-identify-file-attributes/
Questa risposta è per una shell, ma l'OP ha richiesto un programma C. Tuttavia, ho trovato questa domanda mentre cercavo i comandi della shell e stat (1) era proprio quello di cui avevo bisogno! :) – cxw
Solo per curiosità, Perchè ti serve? – Alphaneo
@ 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