Question

Pourquoi les statfs() et statvfs() appelle les deux existent quand ils sont si semblables?

Dans quelles circonstances je préfère un sur l'autre?

Était-ce utile?

La solution

Err, "raisons historiques".

A l'origine 4.4BSD défini un appel statfs(). Linux plus tard mis en œuvre un appel légèrement différent du même nom. Posix standardisé, il entre toutes les versions Unix et Unix libres en définissant statvfs().

statfs() est OS spécifique

statvfs() est conforme POSIX

Comme ils reviennent toutes les structures légèrement différentes, celles plus tard de venir ne peut pas remplacer le premier.

En général, vous devez utiliser statvfs(), l'un Posix. Soyez prudent conseils « utiliser Posix », bien que, comme dans certains cas (pty, par exemple) BSD (ou autre) est un plus portable dans la pratique.

Autres conseils

Si vous voulez juste la capacité du système de fichiers et des informations d'utilisation, les autres réponses sont correctes: préfèrent statvfs parce qu'il est POSIX standard et gère de gros fichiers mieux. statfs est et Linux des BSD spécifiques, avec des structures différentes sur chacun. (Linux 2.6 a ajouté de nouveaux statfs64 et appels système de fstatfs64 qui utilisent une structure étendue pour gérer de plus grandes tailles.) Cependant, statfs est toujours utile sur Linux pour déterminer le type de système de fichiers (en supposant que vous êtes d'accord avec l'écriture code spécifique à Linux).

statfs() est dépréciée en faveur de statvfs(), qui traite considérablement mieux avec un large soutien de fichiers. statfs() est connu pour faire des choses bizarres pour les tailles qui dépassent la valeur d'un unsigned long.

Pour autant que je peux dire (et souvenez-vous), statvfs() a été autour depuis Redhat 7.3, juste après avoir été introduit en remplacement Posix. Vous trouverez probablement sur (la plupart) des systèmes modernes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top