statfs()
est obsolète au profit de statvfs()
, qui traite considérablement mieux avec le support de fichiers volumineux. statfs()
est connu pour faire des choses étranges pour les tailles qui dépassent la valeur d'un long non signé.
Autant que je sache (et que je m'en souvienne), statvfs()
existe depuis Redhat 7.3, juste après avoir été introduit en remplacement de POSIX. Vous le trouverez probablement sur (la plupart) des systèmes modernes.
Euh, "raisons historiques".
À l'origine, 4.4BSD définissait un statfs()
appel. Linux a ensuite implémenté un appel légèrement différent avec le même nom. Posix l'a standardisé entre toutes les versions freenix et Unix en définissant statvfs()
.
statfs()
est spécifique au système d'exploitation
statvfs()
est conforme à posix
Comme ils renvoient tous des structures légèrement différentes, les derniers à venir ne peuvent pas remplacer les premiers.
En général, vous devez utiliser statvfs()
, celle de Posix. Soyez prudent sur les conseils "utiliser Posix", cependant, car dans certains cas (pty, par exemple) le BSD (ou autre) est plus portable en pratique.
Si vous souhaitez uniquement des informations sur la capacité et l'utilisation du système de fichiers, les autres réponses sont correctes :préférez statvfs
car il s'agit de POSIX standard et gère mieux les fichiers de grande taille. statfs
est spécifique à BSD et Linux, avec des structures différentes pour chacun. (Linux 2.6 a ajouté le nouveau statfs64
et fstatfs64
appels système qui utilisent une structure étendue pour gérer des tailles plus grandes.) Cependant, statfs
est toujours utile sous Linux pour déterminer le type de système de fichiers (en supposant que vous êtes d'accord pour écrire du code spécifique à Linux).