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?
1
A
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()
.