在Go中使用os.Lstat返回值

在Go中使用os.Lstat返回值,go,Go,说: Lstat返回描述命名文件的FileInfo。如果文件是符号链接,则返回的FileInfo描述符号链接。Lstat不尝试跟踪链接。如果有错误,则类型为*PathError 但是,返回的接口不提供任何符号链接信息。这些信息到哪里去了?我是否应该在os.FileInfo上使用特定于平台的Sys()方法?Stat返回有关目标文件的信息,Lstat返回有关符号链接本身的信息 信息都包含在文件的模式位中。您可以使用os包中的预定义常量来检查您感兴趣的模式类型 例如,如果您将fileInfo从os.S

说:

Lstat返回描述命名文件的FileInfo。如果文件是符号链接,则返回的FileInfo描述符号链接。Lstat不尝试跟踪链接。如果有错误,则类型为*PathError


但是,返回的接口不提供任何符号链接信息。这些信息到哪里去了?我是否应该在
os.FileInfo
上使用特定于平台的Sys()方法?

Stat
返回有关目标文件的信息,
Lstat
返回有关符号链接本身的信息

信息都包含在文件的模式位中。您可以使用
os
包中的预定义常量来检查您感兴趣的模式类型

例如,如果您将
fileInfo
os.Stat(“/path/to/symlink”)
传递给以下代码,它不会说这是一个符号链接。但是,如果传递返回值
os.Lstat
,它将:

if fileInfo.Mode()&os.ModeSymlink != 0 {
    fmt.Println(fileInfo.Name(), "is a symlink")
}

您希望从链接中获得什么信息?检查
os.Readlink
maybe?但是lstat有什么意义?lstat返回有关符号链接本身的信息。想象一个符号链接就像一个文件,它只包含一个指向另一个文件的字符串。您可以检查该符号链接文件,也可以读取其内容并转到另一个文件。操作系统对stat中的符号链接透明地执行此操作,因此lstat适用于您不想自动跟随的情况。这已经被简化了一点,但可能会给你一个更好的主意。但这一点是在常规统计返回。我觉得Lstat()会返回链接的目标路径等重要内容,但go不会使其可用。@ahmetalpbarkan谷歌:我不确定我是否理解。它们遵循与POSIX系统调用相同的约定,
stat
返回关于目标文件的信息,
lstat
返回关于符号链接本身的信息。那些系统调用的哪一部分不可用?谢谢你的重要提示。我正在对你的答案稍加修改以使其更清楚。我不得不写一些代码来实现操作系统。Stat不能告诉你路径是一个符号链接。
if fileInfo.Mode()&os.ModeSymlink != 0 {
    fmt.Println(fileInfo.Name(), "is a symlink")
}