我正在使用statvfs收集有关特定文件的信息。我也希望获得磁盘名称/分区(如/dev/sdb1
,/dev/media
等)。但是statvfs
结构似乎不提供这样的数据。我在哪里可以找到它?
答案 0 :(得分:1)
使用getmntent()
:
<强>概要强>
#include <stdio.h> #include <mntent.h> FILE *setmntent(const char *filename, const char *type); struct mntent *getmntent(FILE *stream); int addmntent(FILE *stream, const struct mntent *mnt); int endmntent(FILE *streamp); char *hasmntopt(const struct mntent *mnt, const char *opt);
...
<强>描述强>
...
mntent结构定义如下:
struct mntent { char *mnt_fsname; /* name of mounted filesystem */ char *mnt_dir; /* filesystem 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 */ };
例如:
FILE *fp = setmntent( "/etc/mtab", "r" );
for ( ;; )
{
struct mntent *me = getmntent( fp );
if ( NULL == me )
{
break;
}
...
}
endmntent( fp );
给定文件名,您必须进行一些编码以将文件名与文件系统挂载点相匹配。最简单的方法可能是将文件f_fsid
中的struct statvfs
字段与通过调用文件系统上的f_fsid
获得的已挂载文件系统的statvfs()
进行匹配。来自struct mntent
返回的getmntent()
的挂载点。