C ++检查挂载路径是否仍然挂载

时间:2015-12-07 12:52:27

标签: c++ linux mount

我有使用getmntent获得的挂载路径(特别是挂载前缀)的详细信息 在如下定义的结构中:

struct mntent {
    char *mnt_fsname;   /* name of mounted file system */
    char *mnt_dir;      /* file system path prefix */
    char *mnt_type;     /* mount type (see mntent.h) */
    char *mnt_opts;     /* mount options (see mntent.h) */
    int   mnt_freq;     /* dump frequency in days */
    int   mnt_passno;   /* pass number on parallel fsck */
};

使用mnt_dir我想检查一段时间后是否仍然挂载了挂载路径,因为在对它进行某些处理之前,它可能已经卸载了。 检查路径是否仍然安装的最有效方法是什么?

还有办法在路径被卸载的情况下获得回调吗?

1 个答案:

答案 0 :(得分:2)

我认为最有效的方法是缓存st_dev返回的st_inostat()(虽然仅缓存st_dev可能就足够了)。

如果卷已卸载,则挂载点将恢复为最初挂载卷的父文件系统中的空子目录,stat()将返回不同的设备+ inode,用于相同的文件路径。

就收到通知而言,请在inotify(7)界面周围,注意IN_UNMOUNT事件。