21 Stimmen

Unterschied zwischen den Systemaufrufen statvfs() und statfs()?

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

Unter welchen Umständen würde ich das eine dem anderen vorziehen?

21voto

DigitalRoss Punkte 138823

Err, "historische Gründe".

Ursprünglich definierte 4.4BSD eine statfs() anrufen. Linux implementierte später einen etwas anderen Aufruf mit demselben Namen. Posix standardisierte ihn zwischen allen Freenix- und Unix-Versionen durch die Definition von statvfs() .

statfs() ist betriebssystemspezifisch

statvfs() ist posix-konform

Da sie alle leicht unterschiedliche Strukturen aufweisen, können spätere Modelle die ersten nicht ersetzen.

Im Allgemeinen sollten Sie Folgendes verwenden statvfs() die Posix-Version. Seien Sie jedoch vorsichtig mit dem Ratschlag "verwenden Sie Posix", da in einigen Fällen (z.B. pty) die BSD-Version (oder was auch immer) in der Praxis portabler ist.

6voto

Trevor Robinson Punkte 14524

Wenn Sie nur Informationen zur Kapazität und Nutzung des Dateisystems benötigen, sind die anderen Antworten richtig: bevorzugen Sie statvfs weil es dem POSIX-Standard entspricht und große Dateien besser handhaben kann. statfs ist BSD- und Linux-spezifisch, mit unterschiedlichen Strukturen auf beiden Systemen. (Linux 2.6 hat neue statfs64 y fstatfs64 Systemaufrufe, die eine erweiterte Struktur zur Handhabung größerer Größen verwenden). Wie auch immer, statfs ist unter Linux immer noch nützlich, um den Dateisystemtyp zu bestimmen (vorausgesetzt, Sie sind damit einverstanden, Linux-spezifischen Code zu schreiben).

1voto

Tim Post Punkte 32750

statfs() ist veraltet zu Gunsten von statvfs() die sich mit erheblich besser mit Unterstützung für große Dateien. statfs() ist dafür bekannt, dass es bei Größen, die den Wert eines unsigned long überschreiten, seltsame Dinge tut.

Soweit ich das beurteilen kann (und mich erinnere), statvfs() gibt es seit Redhat 7.3, kurz nachdem es als POSIX-Ersatz eingeführt wurde. Sie werden es wahrscheinlich auf (den meisten) modernen Systemen finden.

2 Stimmen

Ich verstehe nicht, wie ein Systemaufruf (statfs) zu Gunsten eines Bibliotheksaufrufs (statvfs) veraltet sein kann. Sie haben unterschiedliche Zwecke, und die Verwendung von statfs in Anwendungscode könnte veraltet sein, aber ich denke, das ist eine Einschränkung wert. Derzeit scheint glibc-2.25 statfs aufzurufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X