Cómo enumerar un árbol de directorios en c
Funciones relacionadas: opendir
Archivo de encabezado: #include lt; ftw.hgt;
Función definida: int ftw(const char * dir, int (*fn) (const *file, const struct stat *sb, int flag), int Depth)
Descripción de la función: ftw() recorrerá recursivamente hacia abajo desde el directorio especificado por el nivel dir. subdirectorio. ftw() pasa tres parámetros a fn(). El primer parámetro es *file, que apunta a la ruta del directorio donde se encuentra en ese momento, y el segundo parámetro es *sb, un puntero a la estructura de estadísticas. El tercer parámetro es una bandera y puede tener los siguientes valores
FTW_F Archivo general
Directorio FTW_D
FTW_DNR Directorio ilegible, el siguiente directorio no será recorrido
Enlace simbólico FTW_SL
FTW_NS no puede obtener los datos de la estructura estadística. Puede ser un problema de permiso.
El último parámetro "profundidad" representa el número de archivos que ftw() abrirá al atravesar el directorio. ftw() requiere al menos un descriptor de archivo en cada nivel al atravesar el directorio, por lo que si el recorrido excede el límite dado por la profundidad, la velocidad de recorrido disminuirá debido al cierre y apertura continuos de archivos
Para terminar Para atravesar ftw(), puede llamar a fn() con el siguiente comando. De lo contrario, ftw() intentará recorrer todos los directorios y devolverá 0
Valor de retorno: 0 si se interrumpe el recorrido; 0 si se atraviesan todos los directorios -1 si se produce un error
Nota adicional: dado que ftw() asigna el uso de memoria dinámicamente, use la forma normal (la función fn que devuelve un valor distinto de cero) para interrumpir el recorrido y no use la función longjmp en fn(). función, no use longjmp()
Ejemplo:
/*Liste los subdirectorios en el directorio /etc/X11
#include sys/stat; .hgt;
#include lt;unistd.hgt;
#include lt;unistd.hgt;
#include lt;unistd.hgt; p>
p>
#includes lt; ftw() include lt; ftw.hgt;
int fn(const char *file, const struct stat *sb, int flag) p>
{
if(bandera == FTW_D)
printf("s --- directorio\n", archivo
else);
printf("s --- directorio\n", archivo);
return 0;
}
int main( )
{
ftw("/etc/X11", fn.500
}
);