Subrutina nftw o nftw64
Finalidad
Camina un árbol de archivos.
Biblioteca
Biblioteca C estándar (libc.a)
Sintaxis
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. |