[英]Mount point attribution
我正在閱讀docker的源代碼,它檢查是否已通過這樣的測試條件掛載了一個目錄,其背后的原理是什么?
func Mounted(mountpoint string) (bool, error) {
mntpoint, err := os.Stat(mountpoint)
if err != nil {
if os.IsNotExist(err) {
return false, nil
}
return false, err
}
parent, err := os.Stat(filepath.Join(mountpoint, ".."))
if err != nil {
return false, err
}
mntpointSt := mntpoint.Sys().(*syscall.Stat_t)
parentSt := parent.Sys().(*syscall.Stat_t)
return mntpointSt.Dev != parentSt.Dev, nil
}
在Linux上的stat(2)
手冊頁中:
st_dev
字段描述此文件所在的設備。 (major(3)
和minor(3)
宏可用於分解此字段中的設備ID。)
因此,所討論的代碼正在執行的是在目錄及其父目錄上調用stat
系統調用,並檢查它們是否駐留在不同的設備上。 僅當它們位於不同的文件系統上時,這才是正確的,這將表明所討論的目錄是安裝點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.