2010-01-05 10 views
6

Auf Unix sind Symlinks Zeiger auf eine andere Datei. Nicht nur die Datei, sondern auch der Symlink hat eine ctime, mtime, .... Ich weiß, dass die Symlinks Zeit zugegriffen werden kann, wie ls es anzeigt. Wenn ich einen der Ruby's File#ctime, , ... verwende, erhalte ich immer das Attribut der Datei, auf die der Symlink zeigt, nicht des Symlinks. Wie kann ich diese Werte in Ruby lesen? Wenn das in Ruby nicht möglich ist, sag mir, wie man es in C macht. Ich würde in diesem Fall meine eigene c-Erweiterung schreiben.Wie ctime, mtime, ... einer symbolischen Verbindung?

Antwort

10

Verwenden Sie File#lstat(). Beispiel:

# 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() kann es in C tun; nicht sicher, ob es ein Ruby-Äquivalent gibt.

+0

Es scheint eine 'File.lstat' in Ruby zu geben, die das gleiche tut. – johannes

1

Es sind nicht nur die Attribute des Symlink und die Attribute des endgültigen Ziel, sondern auch, wenn der Symlink selbst auf eine andere Symlink, eine oder mehrere Zwischenschritte; Um alle Attribute zu erhalten, müssten Sie Lstats in einer Readlink-Schleife ausführen.

Verwandte Themen