gpt4 book ai didi

linux - 挂载点归属

转载 作者:IT王子 更新时间:2023-10-29 01:22:14 32 4
gpt4 key购买 nike

我在看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
}

最佳答案

来自 Linux 上的 stat(2) 手册页:

The st_dev field describes the device on which this file resides. (The major(3) and minor(3) macros may be useful to decompose the device ID in this field.)

所以有问题的代码正在做的是对目录及其父目录调用 stat 系统调用,并检查它们是否驻留在不同的设备上。这只有在它们位于不同的文件系统上时才是正确的,这表明所讨论的目录是一个挂载点。

关于linux - 挂载点归属,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19513874/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com