Der Unterschied zwischen statvfs () und statfs () Systemaufrufe?
Lösung
Err "historische Gründe".
Ursprünglich definiert 4.4BSD einen statfs()
Anruf. Linux implementiert später einen etwas anderen Anruf mit dem gleichen Namen. Posix standardisierte es zwischen allen freenix und Unix-Versionen von statvfs()
definieren.
statfs()
ist OS-spezifische
statvfs()
ist Posix-konforme
Da sie alle etwas unterschiedliche Strukturen zurückkehren, spätere mitzukommen können die erste nicht ersetzen.
In der Regel sollten Sie statvfs()
verwenden, die Posix ein. Seien Sie vorsichtig, „verwenden Posix“ Beratung, wenn es, wie in einigen Fällen (pty, zum Beispiel) die BSD (oder was auch immer) ist mehr tragbar in der Praxis.
Andere Tipps
Wenn Sie nur Dateisystemkapazität und Nutzungsinformationen wünschen, sind die anderen Antworten richtig: lieber statvfs
weil es Standard POSIX und verarbeitet große Datei besser Größen. statfs
ist BSD- und Linux-spezifisch, mit unterschiedlichen Strukturen auf jedem. (Linux 2.6 hat neue statfs64
und fstatfs64
Systemaufrufe, die eine erweiterte Struktur verwenden, um größere Größen handhaben.) Jedoch statfs
auf Linux immer noch nützlich ist, um den Dateisystemtypen für die Bestimmung (vorausgesetzt, Sie mit dem Schreiben in Ordnung sind Linux-spezifischer Code).
statfs()
wird zugunsten statvfs()
veraltet, was beschäftigt wesentlich besser mit Unterstützung für große Dateien. statfs()
ist bekannt, seltsame Dinge für Größen zu tun, die den Wert eines unsigned long überschreiten.
Soweit ich sagen kann (und erinnere), statvfs()
gibt es schon seit Redhat 7.3, kurz nach als POSIX-Ersatz eingeführt. Sie werden es wahrscheinlich, finden auf den (meisten) moderne Systeme.