rpb*_*ear 5 linux mount go linux-kernel
我正在阅读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
}
Run Code Online (Sandbox Code Playgroud)
从stat(2)
Linux上的手册页:
该
st_dev
字段描述了此文件所在的设备.(major(3)
和minor(3)
宏可能有助于在此字段中分解设备ID.)
那么有问题的代码是stat
在目录及其父目录上调用系统调用,并检查它们是否驻留在不同的设备上.只有当它们位于不同的文件系统上时才会出现这种情况,这表明相关目录是一个挂载点.
归档时间: |
|
查看次数: |
301 次 |
最近记录: |