2010-01-05 18 views
6

En los enlaces simbólicos de Unix están los punteros a otro archivo. No solo el archivo sino también el enlace simbólico tiene un ctime, mtime, .... Sé que se puede acceder al tiempo symlinks, como lo muestra ls. Si uso uno de ruby's File#ctime, File#mtime, ..., siempre obtengo el atributo del archivo al que apunta el enlace simbólico, no del enlace simbólico. ¿Cómo puedo leer estos valores en ruby? Si esto no es posible en ruby, dígame cómo hacerlo en C. Escribiría mi propia extensión c en ese caso.Cómo acceder a ctime, mtime, ... de un enlace simbólico?

Respuesta

10

Use File#lstat(). Ejemplo:

# This is a dummy symlink; there's no file named "foo". 
ln -s foo bar 

# Run irb. 
irb(main):001:0> File.lstat("bar") 
=> #<File::Stat dev=0x801, ino=90113, mode=0120777, nlink=1, uid=1000, gid=1000, rdev=0x0, size=3, blksize=4096, blocks=0, atime=2010-01-05 17:59:06 -0500, mtime=2010-01-05 17:59:05 -0500, ctime=2010-01-05 17:59:05 -0500> 

# Get the mtime of the link. 
irb(main):002:0> File.lstat("bar").mtime 
=> 2010-01-05 17:59:05 -0500 
1

lstat() puede hacerlo en C; no estoy seguro de si hay un equivalente de Ruby.

+0

Parece que hay un 'File.lstat' en ruby, que hace lo mismo. – johannes

1

hay no sólo los atributos del enlace simbólico y los atributos del objetivo final, sino también, si el enlace simbólico es en sí mismo a otro enlace simbólico, uno o más pasos intermedios; para obtener todos los atributos, necesitarías hacer lstats en un bucle readlink.

Cuestiones relacionadas