statfs()
está en desuso a favor de statvfs()
, que trata considerablemente mejor con soporte para archivos grandes. statfs()
se sabe que hace cosas extrañas para tamaños que superan el valor de un largo sin firmar.
Por lo que puedo decir (y recordar), statvfs()
ha existido desde Redhat 7.3, justo después de ser presentado como un reemplazo de POSIX. Es probable que lo encuentre en (la mayoría de) los sistemas modernos.
Err, "razones históricas".
Originalmente, 4.4BSD definía un statfs()
llamar. Linux luego implementó una llamada ligeramente diferente con el mismo nombre. Posix lo estandarizó entre todas las versiones de Freenix y Unix definiendo statvfs()
.
statfs()
es específico del sistema operativo
statvfs()
es compatible con posix
Como todos ellos devuelven estructuras ligeramente diferentes, los que vendrán más tarde no pueden reemplazar al primero.
En general deberías usar statvfs()
, el de Posix. Sin embargo, tenga cuidado con los consejos de "use Posix", ya que en algunos casos (pty, por ejemplo) el BSD (o lo que sea) es más portátil en la práctica.
Si solo desea información sobre la capacidad y el uso del sistema de archivos, las otras respuestas son correctas:prefiera statvfs
porque es POSIX estándar y maneja mejor archivos de gran tamaño. statfs
es específico de BSD y Linux, con diferentes estructuras en cada uno. (Linux 2.6 agregó nuevo statfs64
y fstatfs64
llamadas al sistema que usan una estructura expandida para manejar tamaños más grandes). Sin embargo, statfs
sigue siendo útil en Linux para determinar el tipo de sistema de archivos (suponiendo que esté de acuerdo con escribir código específico de Linux).