Subrutina nftw o nftw64

Finalidad

Camina un árbol de archivos.

Biblioteca

Biblioteca C estándar (libc.a)

Sintaxis

#include <ftw.h>

int nftw ( Path,  Function,  Depth,  Flags)
const char *Path;
int *(*Function) ( );
int Depth;
int Flags;
int nftw64(Path,Function,Depth)
const char *Path;
int *(*Function) ( );
int Depth;
int Flags;

Descripción

Las subrutinas nftw y nftw64 descienden recursivamente a la jerarquía de directorios arraigada en el parámetro Vía . Las subrutinas nftw y nftw64 tienen un efecto similar a ftw y ftw64 excepto que toman un argumento de argumento adicional, que es un bit inclusivo de bit a bit-OR de cero o más de los siguientes distintivos:

Elemento Descripción
FTW_CHDIR Si se establece, el directorio de trabajo actual cambiará a cada directorio como se informa de los archivos. Si está claro, el directorio de trabajo actual no cambiará.
FTW_DEPTH Si se establece, todos los archivos de un directorio se reportarán antes del directorio propiamente dicho. Si está claro, el directorio se informará antes de cualquier archivo.
FTW_MOUNT Si se establece, no se seguirán los enlaces simbólicos. Si está claro, se seguirán los enlaces.
FTW_PHYS Si se establece, no se seguirán los enlaces simbólicos. Si está claro, se seguirán los enlaces y no reportará el mismo archivo más de una vez.

Para cada archivo de la jerarquía, las subrutinas nftw y nftw64 llaman a la función especificada por el parámetro Función . La subrutina nftw pasa un puntero a una cadena de caracteres terminada en nulo que contiene el nombre del archivo, un puntero a una estructura de stat que contiene información sobre el archivo, un entero y un puntero a una estructura FTW. La subrutina nftw64 pasa un puntero a una serie de caracteres terminada en nulo que contiene el nombre del archivo, un puntero a una estructura stat64 que contiene información sobre el archivo, un entero y un puntero a una estructura FTW.

La subrutina nftw utiliza la llamada al sistema stat que fallará en archivos de tamaño superior a 2 Gigabytes. La subrutina nftw64 debe utilizarse si existe una posibilidad de archivos de tamaño superior a 2 Gigabytes.

El entero pasado al parámetro Función identifica el tipo de archivo con uno de los valores siguientes:

Elemento Descripción
FTW_F Archivo regular
FTW_D Directorio
FTW_DNR Directorio que no se puede leer
FTW_DP Objeto es un directorio y se han visitado subdirectorios. (Esta condición sólo se producirá si FTW_DEPTH se incluye en los distintivos).
FTW_SL Enlace simbólico
FTW_SLN Enlace simbólico que no nombra un archivo existin. (Esta condición sólo se producirá si el distintivo FTW_PHYS no se incluye en los distintivos).
FTW_NS Archivo para el que la estructura stat no se ha podido ejecutar satisfactoriamente

Si el entero es FTW_DNR, los archivos y subdirectorios contenidos en ese directorio no se procesan.

Si el entero es FTW_NS, el contenido de la estructura stat no tiene sentido. Un ejemplo de un archivo que hace que FTW_NS se pase al parámetro Función es un archivo de un directorio para el que tiene permiso de lectura pero no tiene permiso de ejecución (búsqueda).

El puntero de estructura FTW pasado al parámetro Función contiene base que es el desplazamiento del nombre de archivo del objeto en el nombre de vía de acceso que se ha pasado como primer argumento a Función. El valor del nivel indica la profundidad relativa a la raíz del paseo.

Las subrutinas nftw y nftw64 utilizan un descriptor de archivo para cada nivel del árbol. El parámetro Profundidad especifica el número máximo de descriptores de archivo que se van a utilizar. En general, la ejecución nftw y nftw64 más rápida del valor del parámetro Profundidad es al menos tan grande como el número de niveles en el árbol. Sin embargo, el valor del parámetro Profundidad no debe ser mayor que el número de descriptores de archivo disponibles actualmente para su uso. Si el valor del parámetro Profundidad es 0 o un número negativo, el efecto es el mismo que si fuera 1.

Puesto que las subrutinas nftw y nftw64 son recursivas, es posible que termine con un error de memoria debido al desbordamiento de la pila cuando se aplica a estructuras de archivos muy profundas.

Las subrutinas nftw y nftw64 utilizan la subrutina malloc para asignar almacenamiento dinámico durante su operación. Si la subrutina nftw termina antes de su finalización, como por ejemplo la subrutina longjmp que ejecuta la función especificada por el parámetro Función o por una rutina de interrupción, la subrutina nftw no puede liberar dicho almacenamiento. El almacenamiento permanece asignado. Una forma segura de manejar las interrupciones es almacenar el hecho de que se ha producido una interrupción y disponer que la función especificada por el parámetro Función devuelva un valor distinto de cero la próxima vez que se llame.

Parámetros

Elemento Descripción
Vía Especifica la jerarquía de directorios que se debe buscar.
Función Función proporcionada por el usuario que se llama para cada archivo encontrado.
Profundidad Especifica el número máximo de descriptores de archivo que se van a utilizar. La profundidad no puede ser mayor que OPEN_MAX, que se describe en el archivo de cabecera sys/limits.h .

Valores de retorno

Si el árbol se ha agotado, la subrutina nftw y nftw64 devuelve un valor de 0. Si la subrutina a la que apunta fn devuelve un valor distinto de cero, nftw y nftw64 detiene su cruce de árbol y devuelve el valor devuelto por la subrutina señalada por fn. Si la subrutina nftw y nftw64 detecta un error, devuelve un -1 y establece la variable global errno para indicar el error.

Códigos de error

Si las subrutinas nftw o nftw64 detectan un error, se devuelve un valor de -1 y se establece la variable global errno para indicar el error.

La subrutina nftw y nftw64 no tienen éxito si:

Elemento Descripción
EACCES Se ha denegado el permiso de búsqueda para cualquier componente del parámetro Vía o se ha denegado el permiso de lectura para Vía.
ENAMETOOLONG La longitud de la vía de acceso supera PATH_MAX mientras _POSIX_NO_TRUNC está en vigor.
ENOENT El parámetro Vía apunta al nombre de un archivo que no existe o apunta a una serie vacía.
ENOTDIR Un componente del parámetro Vía no es un directorio.

La subrutina nftw no tiene éxito si:

Elemento Descripción
EVERFLOW Un archivo en Vía tiene un tamaño superior a 2 Gigabytes.