saber - ¿Cómo obtengo el tamaño de un directorio en C?
saber cuantos archivos hay en un directorio c (2)
¿Hay una función POSIX que me dé el tamaño de un directorio (incluidas todas las subcarpetas), más o menos equivalente a " du -s somepath
"?
No hay una función lista para usar, por lo que tendrá que hacer la suya propia. Puede ver el código fuente de la implementación GNU de du como ejemplo (consulte http://www.gnu.org/prep/ftp.html para obtener una lista de lugares desde donde descargar). Está en el paquete coreutils
.
Las llamadas de Posix cruciales son probablemente opendir
, readdir
, closedir
y stat
.
$ man nftw
NOMBRE
ftw
,nftw
- árbol de archivo a pieDESCRIPCIÓN
ftw()
recorre el árbol de directorios que se encuentra en el directorio dirpath, y llama afn()
una vez para cada entrada en el árbol. De forma predeterminada, los directorios se manejan antes que los archivos y subdirectorios que contienen (pre-order crossing).DE ACUERDO A
POSIX.1-2001, SVr4, SUSv1.
Ejemplo simple
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
static unsigned int total = 0;
int sum(const char *fpath, const struct stat *sb, int typeflag) {
total += sb->st_size;
return 0;
}
int main(int argc, char **argv) {
if (!argv[1] || access(argv[1], R_OK)) {
return 1;
}
if (ftw(argv[1], &sum, 1)) {
perror("ftw");
return 2;
}
printf("%s: %u/n", argv[1], total);
return 0;
}