2010-01-05 26 views
6

Trên các liên kết unix là các con trỏ tới một tệp khác. Không chỉ các tập tin mà còn các liên kết tượng trưng có một ctime, mtime,…. Tôi biết thời gian liên kết tượng trưng có thể được truy cập, như ls hiển thị nó. Nếu tôi sử dụng một trong số ruby ​​File#ctime, File#mtime,…, tôi luôn nhận được thuộc tính của tệp mà liên kết tượng trưng trỏ tới, không phải của liên kết tượng trưng. Làm thế nào tôi có thể đọc các giá trị này trong ruby? Nếu điều này là không thể trong ruby, cho tôi biết làm thế nào để làm điều đó trong C. Tôi sẽ viết phần mở rộng c của riêng tôi trong trường hợp đó.Làm thế nào để acess ctime, mtime, ... của một liên kết tượng trưng?

Trả lời

10

Sử dụng File#lstat(). Ví dụ:

# 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() có thể làm điều đó trong C; không chắc chắn nếu có một Ruby tương đương.

+0

Dường như có một 'File.lstat' trong ruby, cũng giống như vậy. – johannes

1

Không chỉ các thuộc tính của liên kết tượng trưng và thuộc tính của mục tiêu cuối cùng, mà còn, nếu liên kết tượng trưng là một liên kết tượng trưng khác, một hoặc nhiều bước trung gian; để có được tất cả các thuộc tính, bạn cần phải làm lstats trong một vòng lặp readlink.

Các vấn đề liên quan