亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用golang獲取linux上文件的訪問/創建/修改時間

發布時間:2020-10-07 15:00:48 來源:腳本之家 閱讀:327 作者:apocelipes 欄目:編程語言

在linux上想獲取文件的元信息,我們需要使用系統調用lstat或者stat。

在golang的os包里已經把stat封裝成了Stat函數,使用它比使用syscall要方便不少。

這是os.Stat的原型:

func Stat(name string) (FileInfo, error)
    Stat returns a FileInfo describing the named file. If there is an error, it
    will be of type *PathError.

返回一個os.FileInfo,這里面包含有文件的元信息:

type FileInfo interface {
 Name() string  // base name of the file
 Size() int64  // length in bytes for regular files; system-dependent for others
 Mode() FileMode  // file mode bits
 ModTime() time.Time // modification time
 IsDir() bool  // abbreviation for Mode().IsDir()
 Sys() interface{} // underlying data source (can return nil)
}
 A FileInfo describes a file and is returned by Stat and Lstat.

重點看到Sys()這個方法,通過它我們可以獲得*syscall.Stat_t,也就是stat和lstat使用并填入文件元信息的struct stat *。
os.FileInfo里的信息并不完整,所以我們偶爾需要使用*syscall.Stat_t來獲取自己想要的信息,比如文件的創建時間。
因為Stat_t里的時間都是syscall.Timespec類型,所以我們為了輸出內容的直觀展示,需要一點helper function:

func timespecToTime(ts syscall.Timespec) time.Time {
 return time.Unix(int64(ts.Sec), int64(ts.Nsec))
}

然后接下來就是獲取修改/創建時間的代碼:

func main() {
 finfo, _ := os.Stat(filename)
 // Sys()返回的是interface{},所以需要類型斷言,不同平臺需要的類型不一樣,linux上為*syscall.Stat_t
 stat_t := finfo.Sys().(*syscall.Stat_t)
 fmt.Println(stat_t)
 // atime,ctime,mtime分別是訪問時間,創建時間和修改時間,具體參見man 2 stat
 fmt.Println(timespecToTime(stat_t.Atim))
 fmt.Println(timespecToTime(stat_t.Ctim))
 fmt.Println(timespecToTime(stat_t.Mtim))
}

這是輸出效果:

使用golang獲取linux上文件的訪問/創建/修改時間

你會發現修改時間居然提前于創建時間!別擔心,那是因為atime,ctime, mtime都可以人為修改,一些從網上下載回來的文件也會包含元信息,所以才會出現這種情況,并不是你穿越了:-P

golang為我們的開發提供了極大的便利,希望大家都能了解和接觸這門語言。

總結

以上所述是小編給大家介紹的使用golang獲取linux上文件的訪問/創建/修改時間,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扶风县| 博野县| 三都| 岳西县| 嘉善县| 政和县| 钟祥市| 五河县| 松桃| 丰县| 白朗县| 涿鹿县| 东兰县| 荃湾区| 芒康县| 斗六市| 昌黎县| 甘孜县| 灌阳县| 嘉鱼县| 绥江县| 呼图壁县| 方正县| 新沂市| 安阳市| 舞钢市| 都昌县| 新昌县| 河北区| 同心县| 张家界市| 青阳县| 阿拉善左旗| 泸州市| 大庆市| 林芝县| 怀宁县| 梧州市| 神木县| 武义县| 揭阳市|