2011-02-23 18 views
11

Quiero escribir un programa en C para mostrar el tiempo de la última modificación del archivo en microsegundos o milisegundos. ¿Cómo podría hacerlo? ¿Me podría ayudar?Cómo mostrar la hora de la última modificación de archivos en linux

Muchas gracias.

+1

Sólo por curiosidad, ¿Por qué necesitas esto? – Alphaneo

+0

@Alphaneo: De hecho, quiero mostrar el tiempo de última modificación de todos los archivos en algún directorio. De acuerdo con esto, puedo ordenar mis archivos. thx – JavaMobile

Respuesta

11

La función stat(). En versiones suficientemente recientes de glibc, st_mtim (nota: no hay detrás e) es un campo de tipo struct timespec que mantiene la hora de modificación del archivo:

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); 
} 

Usted debe verificar la presencia de st_mtim en struct stat en su sistema de construcción, y prepárese para volver al st_mtime (que tiene el tipo time_t, y solo una resolución de 1 segundo) si no está presente.

+0

Muchas gracias. Es maravilloso. Pero el resultado es desorden, ¿es posible clasificarlos de acuerdo con los nombres de archivo? – JavaMobile

+0

@JavaMobile: Claro: ponga punteros a los nombres de archivo en una matriz y ordénelos, luego ejecute esa matriz y llame a 'stat()'. – caf

4

Puede usar la función stat(), devolverá struct stat que contiene la hora de la última modificación de un archivo. Aquí está la página de manual http://linux.die.net/man/2/stat. En cuanto a la precisión, depende de si su sistema de archivos admite marcas de tiempo por debajo del segundo o no.

+0

¿Es posible obtener el tiempo en el rango de Milli o Microsegundo utilizando la estadística ... No lo creo;) – Alphaneo

+2

@Alphaneo: Miré esa página web y dice que 'stat' devuelve los tiempos con una precisión de nanosegundos. –

+0

Sí, stat() en Linux tiene campos adicionales para agregar resolución en nanosegundos, ya que kernel 2.5.48. Sin embargo, como señala @ZelluX, precisión! = Precisión: realmente depende de lo que soporte el sistema de archivos. – payne

0

Para completar las respuestas por Andrew y ZelluX.
La limitación está en el sistema de archivos. Para Linux ext3 es de uso común, y se puede ver en la wikipedia: se utiliza

Date resolution 1s 
1

JFS, XFS, ext4 y Btrfs admiten marcas de tiempo de nanosegundos.

El libro "La interfaz de programación de Linux", de Michael Kerrisk tiene una buena sección sobre atributos de archivo

Cuestiones relacionadas