挂载点归属

我正在阅读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

}


偶然的你
浏览 168回答 1
1回答

牧羊人nacy

从stat(2)Linux 上的手册页:该st_dev字段描述了该文件所在的设备。(major(3)和 minor(3)宏可能有助于分解此字段中的设备 ID。)因此,有问题的代码所做的是调用stat目录及其父目录上的系统调用,并检查它们是否驻留在不同的设备上。仅当它们位于不同的文件系统上时才会如此,这表明所讨论的目录是挂载点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go