Jay*_*Cee -1 unix debian file system-calls go
我有一个来自信息(mac os)的文件:
Created: Tuesday, 26 May 2020 at 11:21
Modified: 26 May 2021 at 15:40
Run Code Online (Sandbox Code Playgroud)
经过一些研究后我尝试这样做:
ctim := fi.Sys().(*syscall.Stat_t).Ctim
atim := fi.Sys().(*syscall.Stat_t).Atim
mtim := fi.Sys().(*syscall.Stat_t).Mtim
log.Println("ctim:", time.Unix(ctim.Sec, ctim.Nsec))
log.Println("atim:", time.Unix(atim.Sec, atim.Nsec))
log.Println("mtim:", time.Unix(mtim.Sec, mtim.Nsec))
Run Code Online (Sandbox Code Playgroud)
但他们都返回:
app_1 | 2021/05/26 15:40:17 ctim: 2021-05-26 15:40:17.199113879 +0000 UTC
app_1 | 2021/05/26 15:40:17 atim: 2021-05-26 15:40:16.457499729 +0000 UTC
app_1 | 2021/05/26 15:40:17 mtim: 2021-05-26 15:40:05.982391804 +0000 UTC
Run Code Online (Sandbox Code Playgroud)
另外,我正在使用 docker + docker-compose,golang:1.14-stretch在debian:bullseye-slim.
显然这不是文件的创建时间。知道我如何获得这些信息吗?
ctime 不是“创建时间”,而是“inode 更改时间”。
OSX 有“出生时间”,这就是 Finder 显示为“创建日期”的内容,并且在 OSX 上的 Go ( GOOS=darwin) 中,它可用作syscall.Stat_tBirthtimespec的字段。
然而,出生时间并不是由 POSIX 定义的,许多其他 Unix 系统要么没有这个概念,要么不向用户程序公开它。直到最近,Linux 才属于其中之一。它的stat系统调用不会返回出生时间,所以 Go 也os.Stat不会。statxLinux 4.11 中添加的系统调用确实了它,但这不在 Go stdlib 中。
statx由golang.org/x/sys/unix支持,但它是一个相当低级的接口(例如,它需要打开目录的整数文件描述符编号;它不能直接在 上工作)。如果它运行在太旧的 Linux 版本上,它也可能会返回错误,即使它足够新,如果您调用它的文件位于没有出生时间支持的文件系统上,或者如果该文件系统的 Linux 文件系统驱动程序根本没有更新。os.FileENOSYSBtime
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |