登录
首页 >  Golang >  Go问答

如何在Golang中修改符号链接的时间戳?

来源:stackoverflow

时间:2024-03-06 12:18:27 166浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《如何在Golang中修改符号链接的时间戳?》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

os.Chtimes 始终遵循符号链接并更改实际文件时间戳。 有没有一种方法可以更改符号链接时间戳?

就像 touch -h 一样。


解决方案


不确定这是否可能,至少从 syscall 包来看是这样。

查看 syscall.Chtimes 的源代码:

func chtimes(name string, atime time.time, mtime time.time) error {
    var utimes [2]syscall.timespec
    utimes[0] = syscall.nsectotimespec(atime.unixnano())
    utimes[1] = syscall.nsectotimespec(mtime.unixnano())
    if e := syscall.utimesnano(fixlongpath(name), utimes[0:]); e != nil {
        return &patherror{"chtimes", name, e}
    }
    return nil
}

复制此代码 - 并删除我假设遵循符号链接的 fixlongpath 调用 - 仍然影响目标文件,而不是源符号链接。

即使在指向不存在文件的符号链接上尝试此操作,也会返回运行时错误 no such file or directory

一个 cgo pkg - 可以,但这似乎有点过分了。

如果你使用 linux,你可以使用 golang.org/x/sys/unix 包,它提供了 lutimes

import "golang.org/x/sys/unix"

unix.Lutimes(symlink, nil)

以上就是《如何在Golang中修改符号链接的时间戳?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>