Provided by:
manpages-es_1.55-10_all 
NOMBRE
ftw, nftw - recorre un arbol de ficheros
SINOPSIS
#include <ftw.h> int ftw (const char *directorio, int (*fn)(const char
*fichero, const struct stat *sb, int flag), int profun);
int nftw (const char *directorio, int (*fn)(const char *fichero, const
struct stat *sb, int flag, struct FTW *s), int profun, int flags);
DESCRIPCI'ON
ftw() recorre un arbol de directorios empezando por el directorio
indicado. Para cada entrada encontrada en el arbol, llama a fn() con
el nombre de camino completo de la entrada, un puntero a la estructura
stat(2) para la entrada, y un int flag, cuyo valor sera uno de los
siguientes:
FTW_F El item es un fichero normal
FTW_D El item es un directorio
FTW_DNR
El item es un directorio que no se puede leer
FTW_SL El item es un enlace simbolico
FTW_NS stat ha fallado en el item que no es un enlace simbolico
Si el item es un enlace simbolico y `stat' ha fallado, XPG4v2 establece
que el estado queda indefinido si se usa FTW_NS o FTW_SL.
ftw() se llama a si misma recursivamente para atravesar los directorios
que encuentra, tratando un directorio antes que sus ficheros o
subdirectorios. Para evitar el uso de todos los descriptores de
fichero de un programa, el argumento profun especifica el numero de
directorios abiertos simultaneamente. Cuando la profundidad es
sobrepasada, ftw() se ralentizara porque los directorios deberan
cerrarse y volverse a abrir. ftw() usa, como mucho, un descriptor de
fichero para cada nivel de la jerarquia de ficheros.
Para detener el recorrido por el arbol, fn() devuelve un valor no-cero.
Este valor se convertira en el devuelto por ftw(). De otro modo, ftw()
continuara hasta que haya recorrido el arbol entero, en cuyo caso
devolvera cero, o hasta que ocurra un error distinto de EACCES (como un
fallo de malloc(3)), en cuyo caso devolvera -1.
Puesto que ftw() usa estructuras de datos dinamicas, la unica forma
segura de salir de un recorrido por un arbol es devolver un valor no
cero. Para manejar interrupciones, por ejemplo, marque que ha ocurrido
una interrupcion y devuelva un valor no-cero (no emplee longjmp(3) a
menos que el programa vaya a terminar).
La funcion nftw() hace precisamente lo mismo que ftw(), excepto que
tiene un argumento flags adicional (y llama a la funcion proporcionada
con un argumento mas). Este argumento flags es un O-logico de cero o
mas de las siguientes opciones:
FTW_CHDIR
Llama a chdir() para moverse a un directorio antes de manejar su
contenido.
FTW_DEPTH
Realiza una busqueda primero en profundidad, es decir, llama a
la funcion para el propio directorio solo despues de tratar el
contenido del directorio y de sus subdirectorios.
FTW_MOUNT
Permanece dentro del mismo sistema de ficheros.
FTW_PHYS
No sigas enlaces simbolicos (esto es lo que desea). Cuando no
esta activa, se siguen los enlaces simbolicos, pero ningun
fichero aparece dos veces.
Si la opcion FTW_PHYS no esta activa, pero FTW_DEPTH si, entonces nunca
se llama a la funcion fn() para un directorio que seria descendiente de
si mismo.
La funcion fn() se llama con cuatro argumentos: la ruta de la entrada
encontrada, un puntero a una estructura `stat' para esa entrada, un
entero que describe su tipo y un puntero a una estructura FTW. El tipo
sera uno de los siguientes: FTW_F, FTW_D, FTW_DNR, FTW_SL, FTW_NS (con
el significado de antes. FTW_SL se da solo con FTW_PHYS activa) o
FTW_DP El item es un directorio y todos sus descendientes ya han sido
tratados. (Esto solo ocurre cuando FTW_DEPTH esta activa).
FTW_SLN
El item es un enlace simbolico que apunta a un fichero
inexistente. (Esto ocurre solo cuando FTW_PHYS no esta activa.)
La estructura FTW apuntada por el cuarto argumento de fn() tiene al
menos los campos base, el desplazamiento del nombre de fichero del item
en la ruta dada como primer argumento de fn(), y level, la profundidad
del item relativo al punto de comienzo (que tiene profundidad 0).
NOTA
La funcion nftw() y el uso de FTW_SL con ftw() se introdujeron en
XPG4v2.
En algunos sistemas ftw() no usara nunca FTW_SL, en otros sistemas
FTW_SL se usa solo para enlaces simbolicos que no apuntan a un fichero
existente, y de nuevo en otros sistemas, ftw() usara FTW_SL para cada
enlace simbolico. Si quiere un uso determinista, use nftw().
Bajo Linux, libc4, libc5 y glibc 2.0.6 usaran FTW_F para todos los
objetos (ficheros, enlaces simbolicos, FIFOs, etc) sobre los que se
pueda aplicar la funcion stat(2), y que no sean un directorio. La
funcion nftw() esta disponible desde glibc 2.1.
CONFORME A
AES, SVID2, SVID3, XPG2, XPG3, XPG4 y XPG4v2.
V'EASE TAMBI'EN
stat(2)