2010-01-05 6 views
6

Les liens symboliques unix sont des pointeurs vers un autre fichier. Non seulement le fichier mais aussi le lien symbolique a un ctime, mtime, .... Je sais que le temps de liens symboliques peut être consulté, car ls l'affiche. Si j'utilise l'un des File#ctime, File#mtime de ruby, ..., j'obtiens toujours l'attribut du fichier pointé par le lien symbolique, pas du lien symbolique. Comment puis-je lire ces valeurs dans ruby? Si ce n'est pas possible dans ruby, dites-moi comment le faire en C. J'écrirais ma propre extension c dans ce cas.Comment accéder à ctime, mtime, ... d'un lien symbolique?

Répondre

10

Utilisez File#lstat(). Exemple:

# 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() peut le faire en C; pas sûr s'il y a un équivalent Ruby.

+0

Il semble y avoir un 'File.lstat' dans ruby, qui fait la même chose. – johannes

1

Il sont non seulement les attributs du lien symbolique et les attributs de la cible finale, mais aussi, si le lien symbolique est lui-même à un autre lien symbolique, une ou plusieurs étapes intermédiaires; Pour obtenir tous les attributs, vous devez utiliser lstats dans une boucle de readlink.

Questions connexes