请问不读mtab文件,是不是可以知道一个分区的mount路径?

发布于 2022-07-23 00:23:57 字数 81 浏览 4 评论 4

如题目,请问在一个系统了,如果一个分区已经被mount到一个路径了,我能调用什么函数,或者linux系统动态更新的文件,来得到某个分区的mount路径吗?谢谢了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

贪恋 2022-07-27 13:11:04

#include <sys/vfs.h>
#include <mntent.h>

#define MTAB_FILE "/etc/mtab"
extern struct mntent *find_mount_point(const char *name, const char *table)
{
        struct stat s;
        dev_t mountDevice;
        FILE *mountTable;
        struct mntent *mountEntry;
                                                                                                      
        if (stat(name, &s) != 0)
        {
            debug(2)("stat %s failedn", name);
                return 0;
        }
                                                                                                      
        if ((s.st_mode & S_IFMT) == S_IFBLK)
                mountDevice = s.st_rdev;
        else
                mountDevice = s.st_dev;
                                                                                                      
                                                                                                      
        if ((mountTable = setmntent(table, "r")) == 0)
        {
            debug(2)("setmntent %s failedn", table);
                return 0;
        }
                                                                                                      
        while ((mountEntry = getmntent(mountTable)) != 0) {
                if (strcmp(name, mountEntry->mnt_dir) == 0
                        || strcmp(name, mountEntry->mnt_fsname) == 0)   /* String match. */
                        break;
                if (stat(mountEntry->mnt_fsname, &s) == 0 && s.st_rdev == mountDevice)
                        break;
                if (stat(mountEntry->mnt_dir, &s) == 0 && s.st_dev == mountDevice)      
                        break;
        }
        endmntent(mountTable);
        return mountEntry;
}
bool mount_on_same_point(const char *name1, const char *name2)
{
        struct mntent *mountEntry;
        char *mnt_dev_name1, *mnt_dev_name2;
        bool ret=true;
        mountEntry = find_mount_point(name1, MTAB_FILE);
        if (mountEntry==NULL)
            return true;
        mnt_dev_name1 = strdup(mountEntry->mnt_fsname);
        debug(5)("%s mount on %sn",name1, mnt_dev_name1);
        mountEntry = find_mount_point(name2, MTAB_FILE);
        if (mountEntry==NULL)
            return true;
        mnt_dev_name2 = strdup(mountEntry->mnt_fsname);
        debug(5)("%s mount on %sn",name2, mnt_dev_name2);
        if (strcmp(mnt_dev_name1,mnt_dev_name2)!=0)
            ret = false;
        free(mnt_dev_name1);
        free(mnt_dev_name2);
        return ret;
}

梦途 2022-07-27 03:26:37

是的。 但如果mount指定-n,就不更新mtab.

Refer to `man mount' for more details.

憧憬巴黎街头的黎明 2022-07-26 05:15:16

我刚才试了一下,似乎我mount一个分区到一个路径后,或者umount后,mtab文件里也会自动或者删除出现这个mount条目。请问mtab这个文件是不是也会随着mount信息自动更新的啊?

旧人哭 2022-07-24 02:58:50

cat /proc/mounts

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文