На Unix символьные ссылки являются указателями на другой файл. Не только файл, но также и символьная ссылка имеют ctime, mtime, …. Я знаю, что ко времени символьных ссылок можно получить доступ, как ls
дисплеи это. Если я использую один из рубина File#ctime
, File#mtime
, …, я всегда получаю атрибут файла, на который символьная ссылка указывает, не символьной ссылки. Как я могу читать, это оценивает в рубине? Если это не возможно в рубине, скажите мне, как сделать это в C. Я записал бы свое собственное c расширение в этом случае.
Use 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
Есть не только атрибуты симлинки и атрибуты конечной цели, но и, если симлинка сама по себе на другую симлинку, один или несколько промежуточных шагов; чтобы получить все атрибуты, нужно сделать lstats в цикле чтения ссылок.
.lstat()
может сделать это на C; не уверен, есть ли рубиновый эквивалент.