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?
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.
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).
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.
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 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.