Frage

Warum die statfs() und statvfs() ruft beide existieren, wenn sie so ähnlich sind?

Unter welchen Umständen würde ich es vorziehen, einen über den anderen?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top