Escribo una aplicación multiplataforma y necesito el espacio total en disco disponible. Para los sistemas posix (Linux y Macos) estoy usando statvfs. Creé este método de C++:¿Cómo obtener espacio de disco total disponible en sistemas Posix?
long OSSpecificPosix::getFreeDiskSpace(const char* absoluteFilePath) {
struct statvfs buf;
if (!statvfs(absoluteFilePath, &buf)) {
unsigned long blksize, blocks, freeblks, disk_size, used, free;
blksize = buf.f_bsize;
blocks = buf.f_blocks;
freeblks = buf.f_bfree;
disk_size = blocks*blksize;
free = freeblks*blksize;
used = disk_size - free;
return free;
}
else {
return -1;
}
}
Desafortunadamente estoy obteniendo valores bastante extraños que no puedo entender. Por ejemplo: f_blocks = 73242188 f_bsize = 1048576 f_bfree = 50393643 ...
son aquellos valores en bits, bytes o cualquier otra cosa? Leí aquí en stackoverflow esos deben ser bytes, pero luego me gustaría tener el número total de bytes libres es: f_bsize * f_bfree = 1048576 * 50393643 pero esto significa 49212.542GB ... demasiado ...
Am Estoy haciendo algo mal con el código o cualquier otra cosa? Gracias!
¿Qué sistema de archivos está usando que tiene un tamaño de bloque de 1048576? –
Este es un sistema operativo Mac extendido (mayúsculas y minúsculas, registro). En este momento estoy trabajando en mac, pero, por lo que puedo entender, se supone que esto funciona. –
Además de la rareza con su tamaño de bloque y su supuesta unidad de 70TB, tenga en cuenta que un 'largo' en OSX de 32 bits es de solo 32 bits. Incluso una vez que tenga los números correctos, es probable que sea lo suficientemente grande para su número de * bloques *, pero no lo suficientemente grande para su número de * bytes *. Pueden obtenerse unidades de hasta 4GB de proveedores especializados ;-) –