Как получить доступ к символьной ссылке ctime, mtime, ...? - PullRequest
6 голосов
/ 06 января 2010

В Unix символические ссылки являются указателями на другой файл. Не только файл, но и символическая ссылка имеет ctime, mtime,…. Я знаю, что время символических ссылок можно получить, поскольку ls отображает его. Если я использую один из File#ctime, File#mtime,…, ruby, я всегда получаю атрибут файла, на который указывает символическая ссылка, а не символической ссылки. Как я могу прочитать эти значения в рубине? Если это невозможно в ruby, скажите мне, как это сделать в C. Я бы написал в этом случае свое собственное расширение c.

Ответы [ 3 ]

10 голосов
/ 06 января 2010

Используйте 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
1 голос
/ 06 января 2010

Существуют не только атрибуты символической ссылки и атрибуты конечной цели, но также, если символическая ссылка сама является другой символической ссылкой, один или несколько промежуточных шагов; чтобы получить все атрибуты, вам нужно выполнить lstats в цикле readlink.

1 голос
/ 06 января 2010

lstat() может сделать это в C; не уверен, что есть эквивалент Ruby.

...