Ответ 1
Linux
ctime - это время обработки inode или файла. Ctime обновляется, когда атрибуты файла изменены, например, изменение владельца, изменение разрешения или перемещения файла в другую файловую систему, но также будет обновляется при изменении файла.
Файл ctime и atime зависят от ОС. Для Linux ctime устанавливается Linux на текущую временную метку при изменении inode или файла.
Вот пример, в Linux, о неявном изменении ctime, установив atime и mtime на их исходные значения.
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