如何使用Go获取文件的ctime,mtime,atime并进行更改?
在Go 1.1.2中,* os.Stat只能获取mtime * os.Chtimes可以更改mtime和atime,而不能更改ctime。
的Linux 时间 ctime是索引节点或文件更改时间。更改文件属性(例如更改所有者,更改权限或将文件移至其他文件系统)时,ctime会更新,但在修改文件时也会更新。
的Linux
时间
ctime是索引节点或文件更改时间。更改文件属性(例如更改所有者,更改权限或将文件移至其他文件系统)时,ctime会更新,但在修改文件时也会更新。
文件ctime和atime取决于操作系统。对于Linux,更改索引节点或文件时,Linux将ctime设置为当前时间戳。
这是一个示例,在Linux上,通过将atime和mtime设置为其原始值来隐式更改ctime。
package main import ( "fmt" "os" "syscall" "time" ) func statTimes(name string) (atime, mtime, ctime time.Time, err error) { fi, err := os.Stat(name) if err != nil { return } mtime = fi.ModTime() stat := fi.Sys().(*syscall.Stat_t) atime = time.Unix(int64(stat.Atim.Sec), int64(stat.Atim.Nsec)) ctime = time.Unix(int64(stat.Ctim.Sec), int64(stat.Ctim.Nsec)) return } func main() { name := "stat.file" atime, mtime, ctime, err := statTimes(name) if err != nil { fmt.Println(err) return } fmt.Println(atime, mtime) fmt.Println(ctime) err = os.Chtimes(name, atime, mtime) if err != nil { fmt.Println(err) return } atime, mtime, ctime, err = statTimes(name) if err != nil { fmt.Println(err) return } fmt.Println(atime, mtime) fmt.Println(ctime) }
输出:
2014-01-02 02:21:26.262111165 -0500 EST 2014-01-02 02:18:13.253154086 -0500 EST 2014-01-02 02:21:25.666108207 -0500 EST 2014-01-02 02:21:26.262111165 -0500 EST 2014-01-02 02:18:13.253154086 -0500 EST 2014-01-02 02:21:43.814198198 -0500 EST