在Unix系统中,符号链接是指向另一个文件的指针。不仅文件本身,符号链接也有一个ctime、mtime等属性。我知道可以访问符号链接时间,因为ls
会显示它。但是,如果我使用Ruby的File#ctime
,File#mtime
等方法,我总是得到符号链接所指向文件的属性,而不是符号链接自身的属性。如何在Ruby中读取符号链接的这些值呢?如果在Ruby中无法实现,请告诉我如何在C语言中实现。在那种情况下,我会编写自己的C扩展。
在Unix系统中,符号链接是指向另一个文件的指针。不仅文件本身,符号链接也有一个ctime、mtime等属性。我知道可以访问符号链接时间,因为ls
会显示它。但是,如果我使用Ruby的File#ctime
,File#mtime
等方法,我总是得到符号链接所指向文件的属性,而不是符号链接自身的属性。如何在Ruby中读取符号链接的这些值呢?如果在Ruby中无法实现,请告诉我如何在C语言中实现。在那种情况下,我会编写自己的C扩展。
使用File#lstat()
。 示例:
# 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
lstat()
可以在 C 中实现;不确定是否有 Ruby 的等效方法。
符号链接本身的属性和最终目标的属性不仅如此,如果符号链接本身指向另一个符号链接,则还需要一步或多步中间步骤;要获取所有属性,您需要在readlink循环中执行lstats。
File.lstat
,它执行相同的操作。 - johannes