如何使用statvfs查找磁盘名称?

时间:2017-04-20 09:08:21

标签: linux filesystems posix system-calls

我正在使用statvfs收集有关特定文件的信息。我也希望获得磁盘名称/分区(如/dev/sdb1/dev/media等)。但是statvfs结构似乎不提供这样的数据。我在哪里可以找到它?

1 个答案:

答案 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()的挂载点。