gpt4 book ai didi

crystal-lang - 是否有可能获得损坏的符号链接(symbolic link)的解析路径?

转载 作者:行者123 更新时间:2023-12-04 04:14:38 24 4
gpt4 key购买 nike

我一直无法找到一种方法来获取 Crystal 中损坏的符号链接(symbolic link)的目标路径:

Dir.cd "/tmp"
`ln -s a b`
puts File.exists?(b) # false
puts File.symlink?(b) # true

标准库中是否有任何东西可以获取损坏链接指向的地址?

最佳答案

这是在 Linux/MacOS 上通过 readlink 完成的,不幸的是,它还没有在标准库中实现。这在 issue #3284 中进行了跟踪在 GitHub 上,kostya 发布了一个似乎可以解决该问题的版本。

使用他的代码:

lib LibC
fun readlink(pathname : Char*, buf : Char*, bufsiz : SizeT) : SizeT
end

def File.readlink(path)
buf = uninitialized UInt8[1024]
size = LibC.readlink(path.to_unsafe, buf.to_unsafe, 1024).to_i32

if size == -1
raise Errno.new("readlink")
elsif size > 1024
raise "buffer too small"
else
return String.new(buf.to_unsafe, size)
end
end

然后调用那个函数:

File.symlink("a", "b")
puts File.readlink("b") # => a

但是请注意,您可能需要做一些工作才能获得绝对路径。直接使用命令行版本可能更可行,因为您可以传递给出绝对路径的 -f 标志:

File.symlink("a", "b")
puts `readlink -f b` # => /path/to/a

-f 标志在 MacOS 上不可用。

关于crystal-lang - 是否有可能获得损坏的符号链接(symbolic link)的解析路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50959527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com