2017-04-20 11 views
1

J'utilise statvfs pour collecter des informations sur un fichier spécifique. Je voudrais obtenir le nom de disque/partition ainsi (comme /dev/sdb1, /dev/media et ainsi de suite). Cependant, la structure statvfs ne semble pas fournir de telles données. Où puis-je le trouver?Comment trouver le nom du disque avec statvfs?

Répondre

1

Utilisation getmntent():

SYNOPSIS

#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); 

...

DESCRIPTION

... 01

La structure mntent est définie dans la manière suivante:

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 */ 
}; 

Par exemple:

FILE *fp = setmntent("/etc/mtab", "r"); 
for (;;) 
{ 
    struct mntent *me = getmntent(fp); 
    if (NULL == me) 
    { 
     break; 
    } 

    ... 
} 

endmntent(fp); 

Étant donné un nom de fichier, vous aurez à faire un peu de codage pour correspondre au nom du fichier point de montage du système. Le moyen le plus simple est probablement de faire correspondre le champ f_fsid du struct statvfs du fichier au f_fsid d'un système de fichiers monté obtenu en appelant le statvfs() sur le point de montage du système de fichiers à partir du struct mntent retourné par getmntent().