我有使用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
我想检查一段时间后是否仍然挂载了挂载路径,因为在对它进行某些处理之前,它可能已经卸载了。
检查路径是否仍然安装的最有效方法是什么?
还有办法在路径被卸载的情况下获得回调吗?
答案 0 :(得分:2)
我认为最有效的方法是缓存st_dev
返回的st_ino
和stat()
(虽然仅缓存st_dev
可能就足够了)。
如果卷已卸载,则挂载点将恢复为最初挂载卷的父文件系统中的空子目录,stat()
将返回不同的设备+ inode,用于相同的文件路径。
就收到通知而言,请在inotify(7)
界面周围,注意IN_UNMOUNT
事件。