我正在阅读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}
1 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
从stat(2)
Linux 上的手册页:
该
st_dev
字段描述了该文件所在的设备。(major(3)
和minor(3)
宏可能有助于分解此字段中的设备 ID。)
因此,有问题的代码所做的是调用stat
目录及其父目录上的系统调用,并检查它们是否驻留在不同的设备上。仅当它们位于不同的文件系统上时才会如此,这表明所讨论的目录是挂载点。
- 1 回答
- 0 关注
- 167 浏览
添加回答
举报
0/150
提交
取消