我正在阅读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
}
答案 0 :(得分:5)
来自Linux上的stat(2)
手册页:
st_dev
字段描述了此文件所在的设备。 (major(3)
和minor(3)
宏可用于分解此字段中的设备ID。)
所以有问题的代码是在目录及其父目录上调用stat
系统调用,并检查它们是否驻留在不同的设备上。只有在不同的文件系统上才会出现这种情况,这表明相关目录是一个挂载点。