2010-01-05 2 views
6

unix의 심볼릭 링크는 다른 파일을 가리키는 포인터입니다. 파일뿐만 아니라 심볼릭 링크도 ctime, mtime, ...을 가지고 있습니다. ls에 표시되는 심볼릭 링크 시간에 액세스 할 수 있습니다. 루비의 File#ctime, File#mtime ... 중 하나를 사용하면 심볼릭 링크가 가리키는 파일의 속성이 표시됩니다. 심볼릭 링크가 아닌 파일의 속성이 표시됩니다. 어떻게이 값을 루비에서 읽을 수 있습니까? 이것이 루비에서 가능하지 않다면, 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

1

거기뿐만 아니라 심볼릭 링크의 속성과 최종 목표의 속성뿐만 아니라, 심볼릭 링크는 다른 심볼릭 링크, 하나 이상의 중간 단계에 자체 인 경우; 모든 속성을 얻으려면 readlink 루프에서 lstats를 수행해야합니다.

관련 문제