Linux系统文件的三种time(atime/ctime/mtime)

使用Go操作文件,根据创建时间(或修改时间)进行不同处理。

在Mac上,文件相关的结构体字段在syscall/ztypes_darwin_arm64.go下的Stat_t:

go 复制代码
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。根据以下代码:

go 复制代码
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

mtime是指文件内容被最后一次修改的时间,ctime则指文件的元数据(如权限,所有者等)最后一次被修改的时间

在Linux中,可以通过stat命令查看

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

相关推荐
文青小兵3 分钟前
Linux云计算——docker compose haibor elfk (四)
linux·服务器·docker·云计算
思麟呀9 分钟前
C++11并发编程:互斥锁
linux·开发语言·c++·windows
砍材农夫10 分钟前
物联网实战:Spring Boot + Netty 搭建 MQTT | MQTT 设备模拟器
java·spring boot·后端·物联网·struts·spring·netty
顺风尿一寸12 分钟前
深度解析 Linux touch 命令:从用户输入到磁盘 Inode 的完整旅程
linux
j_xxx404_20 分钟前
Linux 线程日志系统设计:从策略模式、RAII 到 pthread 线程安全与内核写入路径|附源码
linux·运维·服务器·开发语言·c++·人工智能·策略模式
明天…ling23 分钟前
CentOS 7 安装 Docker 踩坑全记录(含 sudo 权限、yum 源失效、命令报错解决方案)
linux·docker·centos
江华森23 分钟前
Linux 内核调优 + TCP/IP 协议栈深度解析 + 低延迟网络优化
linux·网络·tcp/ip
BingoGo25 分钟前
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
后端
审判长烧鸡27 分钟前
【AI问答】GO代码循环返值
go