On Thu, Jun 20, 2019 at 12:55 PM GoFreshMan <1on1y4u1...@gmail.com> wrote:

> *linux version: 5.1.9-300.fc30.x86_64*
> *linux dist: fedora 30*
> *go version: go1.12.5 linux/amd64*
>
>
> [ ~/Rhizobium]$ stat README.md
>  文件:README.md
>  大小:461            块:8          IO 块:4096   普通文件
> 设备:805h/2053d      Inode:4199368     硬链接:1
> 权限:(0664/-rw-rw-r--)  Uid:( 1000/     dba)   Gid:( 1000/     dba)
> 环境:unconfined_u:object_r:user_home_t:s0
> 最近访问:2019-06-17 16:39:21.000000000 +0800 (last access)
> 最近更改:2019-06-18 10:40:27.000000000 +0800 (last change)
> 最近改动:2019-06-18 14:05:06.950815138 +0800 (last modified)
> 创建时间:2019-06-17 16:39:21.343782864 +0800 (create time)
>
>
>
>
> In my go program:
> package common
>
> import (
> "fmt"
> "os"
> "os/user"
> "syscall"
> "testing"
> "time"
> )
>
> func TestGetFileState(t *testing.T) {
> f, _ := os.Stat("/home/dba/Rhizobium/README.md")
> x := GetFileState1(f)
> fmt.Printf("%+v\n", f)
> fmt.Printf("%+v", x)
> }
>
> func GetFileState1(info os.FileInfo) FileStat1 {
> stat := info.Sys().(*syscall.Stat_t)
> fileState := FileStat1{
> Inode:   uint64(stat.Ino),
> Device:  uint64(stat.Dev),
> Name:    info.Name(),
> Size:    info.Size(),
> Mode:    info.Mode(),
> CrtTime: time.Unix(int64(stat.Ctim.Sec), int64(stat.Ctim.Nsec)),
> ModTime: time.Unix(stat.Mtim.Sec, stat.Mtim.Nsec),
> AcsTime: time.Unix(stat.Atim.Sec, stat.Atim.Nsec),
> isDir:   info.IsDir(),
> }
> groupPointer, _ := user.LookupGroupId(fmt.Sprintf("%d", stat.Gid))
> fileState.userGroup = *groupPointer
>
> userPointer, _ := user.LookupId(fmt.Sprintf("%d", stat.Uid))
> fileState.user = *userPointer
> return fileState
> }
>
> type FileStat1 struct {
> Inode     uint64
> Device    uint64
> Name      string
> Size      int64 // bytes
> Mode      os.FileMode
> CrtTime   time.Time // 创建时间
> AcsTime   time.Time // 上次读取时间
> ModTime   time.Time // 上次修改时间
> isDir     bool
> user      user.User
> userGroup user.Group
> }
>
> output:
>
> === RUN   TestGetFileState
> &{name:README.md size:461 mode:436 modTime:{wall:0 ext:63696422427
> loc:0x638c00} sys:{Dev:2053 Ino:4199368 Nlink:1 Mode:33204 Uid:1000
> Gid:1000 X__pad0:0 Rdev:0 Size:461 Blksize:4096 Blocks:8 Atim:{
> *Sec:1560760761* Nsec:0} Mtim:{Sec:1560825627 Nsec:0} Ctim:{Sec:
> *1560837906* Nsec:950815138} X__unused:[0 0 0]}}
> {Inode:4199368 Device:2053 Name:README.md Size:461 Mode:-rw-rw-r-- 
> CrtTime:*2019-06-18
> 14:05:06.950815138 +0800 CST* AcsTime:2019-06-17 16:39:21 +0800 CST
> ModTime:2019-06-18 10:40:27 +0800 CST isDir:false user:{Uid:1000 Gid:1000
> Username:dba Name:dba HomeDir:/home/dba} userGroup:{Gid:1000 Name:dba}}---
> PASS: TestGetFileState (0.00s)
> PASS
> ok  command-line-arguments 0.002s
>
>
> *Question:*
>
> why  file.Stat().Sys().(*syscall.Stat_t) get file create time is :
>
>  Ctim:{Sec:*1560837906* Nsec:950815138} === *2019-06-18
> 14:05:06.950815138 +0800 CST*
>
> access time is
>
> {*Sec:1560760761* Nsec:0} ==== 2019-06-17 16:39:21 +0800
>
> It seems the ctim and atime just on the contray
>

We'd have to know more about the history of that particular file on your
system in order to provide more detailed information, but a couple things
to note that probably help explaining your confusion:

   - ctime is not the create time, it's the inode change time, so it gets
   updated whenever you change permissions, update the link-count (via a
   rename or  hardlink), or file-size change (among other things)
   - atime may not be reliable. E.G. filesystems mounted with the "noatime"
   option won't ever generate a write to the inode on its own to update the
   atime of a file; and "relatime" will limit how often it updates the atime
   timestamp.



>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/298e7dc4-1817-4933-a7d1-e9be00e9fa13%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/298e7dc4-1817-4933-a7d1-e9be00e9fa13%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CANrC0BgO_PTpjN3iq7NrUjE1B9JNimVS37H2khr0yiZ8JFeDhw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to