为了账号安全,请及时绑定邮箱和手机立即绑定

挂载点归属

挂载点归属

Go
偶然的你 2021-07-02 10:53:14
我正在阅读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目录及其父目录上的系统调用,并检查它们是否驻留在不同的设备上。仅当它们位于不同的文件系统上时才会如此,这表明所讨论的目录是挂载点。


查看完整回答
反对 回复 2021-07-05
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信