我正在使用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()

08-24 19:06