我有一個來自信息(mac os)的文件:Created: Tuesday, 26 May 2020 at 11:21Modified: 26 May 2021 at 15:40經過一些研究,我試圖做到:ctim := fi.Sys().(*syscall.Stat_t).Ctimatim := fi.Sys().(*syscall.Stat_t).Atimmtim := fi.Sys().(*syscall.Stat_t).Mtimlog.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))但他們都回來了:app_1 | 2021/05/26 15:40:17 ctim: 2021-05-26 15:40:17.199113879 +0000 UTCapp_1 | 2021/05/26 15:40:17 atim: 2021-05-26 15:40:16.457499729 +0000 UTCapp_1 | 2021/05/26 15:40:17 mtim: 2021-05-26 15:40:05.982391804 +0000 UTC此外,我正在使用docker + docker-compose,從中構建并保存二進制文件。golang:1.14-stretchdebian:bullseye-slim顯然,這不是文件的創建時間。任何想法,我怎么能得到這個信息?
1 回答

Helenr
TA貢獻1780條經驗 獲得超4個贊
ctime不是“創建時間”,而是“inode change time”。
OSX具有“出生時間”,這是Finder顯示為“創建日期”,而在OsX上的Go中()中,它可以用作系統調用字段。Stat_t。GOOS=darwin
Birthtimespec
但是,POSIX沒有定義出生時間,許多其他Unix系統要么沒有這個概念,要么沒有向用戶程序公開它。直到最近,Linux還是其中之一。它的系統調用不會返回出生時間,所以Go's也不會。在 Linux 4.11 中添加的系統調用確實會返回它,但這不在 Go stdlib 中。stat
os.Stat
statx
statx受 golang.org/x/sys/unix 但它是一個相當低級的接口(例如,它需要一個開放目錄的整數文件描述符號;它不能直接在)。如果它運行在太舊的Linux版本上,即使它足夠新,如果你調用它的文件在沒有出生時間支持的文件系統上,或者如果該文件系統的Linux文件系統驅動程序根本沒有更新,你得到的可能也是零。os.File
ENOSYS
Btime
- 1 回答
- 0 關注
- 63 瀏覽
添加回答
舉報
0/150
提交
取消