2010-01-05 67 views
6

關於unix符號鏈接是指向另一個文件的指針。不僅文件,而且符號鏈接都有ctime,mtime,...。我知道符號鏈接的時間可以被訪問,因爲ls顯示它。如果我使用ruby的File#ctime,File#mtime,...之一,我總是得到符號鏈接指向的文件的屬性,而不是符號鏈接。我如何讀取ruby中的這個值?如果這在ruby中是不可能的,請告訴我如何用C語言來完成。在這種情況下,我會寫自己的c擴展名。如何獲取符號鏈接的ctime,mtime,...?

回答

10

使用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

lstat()可以在C中做到這一點;不知道是否有Ruby等價物。

+0

似乎有一個'File.lstat'在紅寶石,這是相同的。 – johannes 2010-01-05 23:06:47

1

有不是符號鏈接的唯一的屬性和最終目標的屬性,還可以,如果符號鏈接本身到另一個符號鏈接,一個或多箇中間步驟;爲了獲得所有的屬性,你需要在readlink循環中執行lstats。

相關問題