PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : freien Speicher in einem Verzeichnis ermitteln (in C)



Sion
25-09-2002, 19:30
Hi,

weiß jemand, wie ich einfach den Speicher in einem Verzeichnis ermitteln kann, also z.B. wie groß in diesem Verzeichnis eine Datei maximal sein darf?
Man könnte sich die Ausgabe von df hernehmen, den Pfad darin suchen, ..., ist aber doch sehr kompliziert, gerade unter C!

Danke, Sion

anda_skoa
25-09-2002, 19:53
Das geht mit statfs



#include <sys/vfs.h>
struct statfs buf;

int ret = statfs("/pfad/", &buf);
if (ret != 0)
// error


Ciao,
_

Sion
26-09-2002, 16:18
Das funktioniert, danke! Für alle "mit-Interessierten": So kann man sich den freien Speicher in kb anzeigen lassen:

#include <sys/vfs.h>
struct statfs buf;

int main(int argc, char *argv[])
{
int ret;
if (statfs(argv[1], &buf) == 0)
printf("%d\n", buf.f_bavail*(buf.f_bsize/1024));
else
{
printf("Error!\n");
return 1;
}
return 0;
}

anda_skoa
26-09-2002, 17:18
Es wäre besser, die Multiplikation zuerst zu machen, denn wenn f_bsize kleiner als 1024 ist, dann ist die Integerdivision == 0.

Ciao,
_

Sion
28-09-2002, 17:36
Original geschrieben von anda_skoa
Es wäre besser, die Multiplikation zuerst zu machen, denn wenn f_bsize kleiner als 1024 ist, dann ist die Integerdivision == 0.

Ciao,
_
Linux rechnet doch bei einem normalen int auf x86 mit 32 Bit, oder? Und in 32 Bit passen nur 4GB.... heutzutage nicht sehr viel (nicht genug für den freien Platz)!
Also besser zuerst f_bavail durch 1024 teilen, wenn dabei 0 rauskommt kann man die Platte wohl als voll bezeichnen.
Oder kann ich ihn dazu bringen, mit 64 Bit zu rechnen, viel. mit einem (long long) cast?

anda_skoa
29-09-2002, 22:28
Du hast recht, das hab ich übersehen.

Am besten in double rechnen.

Ciao,
_