关于后端:Linux系统文件的三种timeatimectimemtime

应用Go操作文件,依据创立工夫(或批改工夫)进行不同解决。

在Mac上,文件相干的构造体字段在[syscall/ztypes_darwin_arm64.go]()下的Stat_t:

type Stat_t struct {
    Dev           int32
    Mode          uint16
    Nlink         uint16
    Ino           uint64
    Uid           uint32
    Gid           uint32
    Rdev          int32
    Pad_cgo_0     [4]byte
    Atimespec     Timespec
    Mtimespec     Timespec
    Ctimespec     Timespec
    Birthtimespec Timespec
    Size          int64
    Blocks        int64
    Blksize       int32
    Flags         uint32
    Gen           uint32
    Lspare        int32
    Qspare        [2]int64
}

工夫相干的有四个字段,即Atimespec、Mtimespec、Ctimespec和Birthtimespec。依据以下代码:

package main

import (
    "fmt"
    "github.com/pkg/errors"
    "os"
    "syscall"
    "time"
)

func main() {
    file, err := os.Stat("/Users/fliter/blog")
    if err != nil && errors.Is(err, os.ErrNotExist) {
        fmt.Println("文件的确不存在,err is:", err)
        //创立多级目录
        //os.MkdirAll("/Users/fliter/blog", os.ModePerm)
    }

    stat_t := file.Sys().(*syscall.Stat_t)

    fmt.Println(stat_t)
    fmt.Println(timespecToTime(stat_t.Atimespec))     // 拜访工夫
    fmt.Println(timespecToTime(stat_t.Ctimespec))     // 批改工夫
    fmt.Println(timespecToTime(stat_t.Mtimespec))     // 批改工夫
    fmt.Println(timespecToTime(stat_t.Birthtimespec)) // 创立工夫

}

func timespecToTime(ts syscall.Timespec) time.Time {
    return time.Unix(ts.Sec, ts.Nsec)
}

创立工夫并不是Ctimespec,而是Birthtimespec。

Ctimespec和Mtimespec仿佛都是批改工夫??

这就波及到UNIX/Linux操作系统中,文件相干的三个time---atime,mtime,ctime

<img src=”Linux系统文件的三种time-atime-ctime-mtime/0.png” width = 100% height = 50% />

mtime是指文件内容被最初一次批改的工夫,ctime则指文件的元数据(如权限,所有者等)最初一次被批改的工夫

在Linux中,能够通过stat命令查看

更多测试&验证相干,可参考此文

本文由mdnice多平台公布

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理