我正在使用statvfs收集特定文件的信息。我也想获得磁盘名/分区(比如/dev/sdb1
,/dev/media
等等)。但是statvfs
结构似乎没有提供这样的数据。我在哪里可以找到它?
最佳答案
使用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()
。