¿Hay alguna función que devuelva la cantidad de espacio libre en una partición de disco dada una ruta de directorio?¿Cómo obtengo de manera programática el espacio libre en disco para un directorio en Linux?
Respuesta
cheque man statvfs(2)
Creo que se puede calcular 'espacio libre' como f_bsize * f_bfree
.
NAME
statvfs, fstatvfs - get file system statistics
SYNOPSIS
#include <sys/statvfs.h>
int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, struct statvfs *buf);
DESCRIPTION
The function statvfs() returns information about a mounted file system.
path is the pathname of any file within the mounted file system. buf
is a pointer to a statvfs structure defined approximately as follows:
struct statvfs {
unsigned long f_bsize; /* file system block size */
unsigned long f_frsize; /* fragment size */
fsblkcnt_t f_blocks; /* size of fs in f_frsize units */
fsblkcnt_t f_bfree; /* # free blocks */
fsblkcnt_t f_bavail; /* # free blocks for unprivileged users */
fsfilcnt_t f_files; /* # inodes */
fsfilcnt_t f_ffree; /* # free inodes */
fsfilcnt_t f_favail; /* # free inodes for unprivileged users */
unsigned long f_fsid; /* file system ID */
unsigned long f_flag; /* mount flags */
unsigned long f_namemax; /* maximum filename length */
};
Puede utilizar impulso :: sistema de archivos:
struct space_info // returned by space function
{
uintmax_t capacity;
uintmax_t free;
uintmax_t available; // free space available to a non-privileged process
};
space_info space(const path& p);
space_info space(const path& p, system::error_code& ec);
Ejemplo:
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
space_info si = space(".");
cout << si.available << endl;
Devuelve: Un objeto de tipo space_info. El valor del objeto space_info se determina como si utilizara POSIX statvfs() para obtener una estructura POSIX statvfs, y luego multiplicara sus miembros f_blocks, f_bfree y f_bavail por su miembro f_frsize, y asignando los resultados a la capacidad, libre, y miembros disponibles respectivamente. Cualquier miembro para el que no se pueda determinar el valor se establecerá en -1.
+1 Funcionó perfectamente. –
Esto incluso funciona para Windows. –
Uno puede conseguir la salida de un comando en un programa mediante el uso de un tubo de esta manera:
char cmd[]="df -h /path/to/directory" ;
FILE* apipe = popen(cmd, "r");
// if the popen succeeds read the commands output into the program with
while ( fgets(line, 132 , apipe))
{ // handle the readed lines
}
pclose(apipe);
// -----------------------------------
- 1. ¿Cómo averiguar el espacio libre en disco para una ruta determinada en un shell de Linux?
- 2. ¿Cómo calcular el espacio libre en el disco?
- 3. centos espacio libre en el disco sin actualizar
- 4. Espacio libre en Jenkins eliminar el directorio 'compilaciones'
- 5. Buscar espacio en disco libre en python en OS/X
- 6. ¿Cómo obtener el espacio en disco en un servidor?
- 7. ¿Cómo se pueden concatenar dos archivos enormes con muy poco espacio libre en el disco?
- 8. Comparta el espacio libre en un WrapPanel
- 9. Espacio en disco anunciado frente a espacio en disco real
- 10. La mejor manera de consultar el espacio en el disco en el servidor remoto
- 11. Espacio libre en disco en una unidad de red en Delphi
- 12. Cómo eliminar el archivo "dead.letter" que no dejó espacio libre en el directorio raíz
- 13. Limpiar Espacio libre en la unidad de disco duro con C#
- 14. ¿Cómo obtengo Accurev para encontrar un espacio de trabajo movido?
- 15. Emular un disco duro en Linux
- 16. Cómo verificar el espacio libre disponible en mongodb
- 17. Cómo obtengo el directorio actual en un servicio web
- 18. Obtenga espacio de disco disponible en ruby
- 19. MongoDb: Evite el exceso de espacio en disco
- 20. ¿Cómo recuperas espacio en el disco después de agregar una alternativa en git?
- 21. ¿Cómo obtengo un tamaño de directorio (archivos en el directorio) en C#?
- 22. Obtenga espacio libre en la memoria interna
- 23. ¿Cómo encuentro el directorio 'temp' en Linux?
- 24. ¿Cómo obtener espacio de disco total disponible en sistemas Posix?
- 25. ¿Cómo determinar cuánto espacio libre hay en una unidad en Qt?
- 26. Comando de Linux para mover un directorio
- 27. un programa para supervisar un directorio en Linux
- 28. Cómo obtengo la ruta de un proceso en Unix/Linux
- 29. Reserve el espacio en disco antes de escribir un archivo para la eficacia
- 30. Directorio JAVA_HOME en Linux
Que se parece exactamente lo que necesito. ¡Aclamaciones! – Matt
statvfs no parece funcionar para unidades montadas vfat. Lo probé con una partición FAT 32 y da 0 para los bloques disponibles. ¿Hay alguna forma de resolverlo? –
@ShadmanAnwer desafortunadamente la página man dice: 'No se especifica si todos los miembros de la estructura devuelta tienen valores significativos en todos los sistemas de archivos. Por lo tanto, quizás FAT32 no sea compatible en este caso. –