Provided by: manpages-es-dev_4.13-4_all bug

NOMBRE

       fts, fts_open, fts_read, fts_children, fts_set, fts_close - recorren una jerarquía de ficheros

SINOPSIS

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fts.h>

       FTS *fts_open(char * const *path_argv, int options,
                     int (*compar)(const FTSENT **, const FTSENT **));

       FTSENT *fts_read(FTS *ftsp);

       FTSENT *fts_children(FTS *ftsp, int instr);

       int fts_set(FTS *ftsp, FTSENT *f, int instr);

       int fts_close(FTS *ftsp);

DESCRIPCIÓN

       The fts functions are provided for traversing file hierarchies.  A simple overview is that the fts_open()
       function  returns  a  "handle" (of type FTS *)  that refers to a file hierarchy "stream".  This handle is
       then supplied to the other fts functions.  The function fts_read()  returns  a  pointer  to  a  structure
       describing  one  of the files in the file hierarchy.  The function fts_children()  returns a pointer to a
       linked list of structures, each of which describes one of the files  contained  in  a  directory  in  the
       hierarchy.

       In  general,  directories  are  visited  two  distinguishable  times;  in  preorder  (before any of their
       descendants are visited) and in postorder (after all of their descendants have been visited).  Files  are
       visited  once.   It is possible to walk the hierarchy "logically" (visiting the files that symbolic links
       point to)  or physically (visiting the symbolic links themselves), order the walk  of  the  hierarchy  or
       prune and/or revisit portions of the hierarchy.

       Two  structures  (and  associated types) are defined in the include file <fts.h>.  The first type is FTS,
       the structure that represents the file hierarchy itself.  The second type is FTSENT, the  structure  that
       represents a file in the file hierarchy.  Normally, an FTSENT structure is returned for every file in the
       file hierarchy.  In this manual page, "file" and "FTSENT structure" are generally interchangeable.

       The  FTSENT  structure  contains fields describing a file.  The structure contains at least the following
       fields (there are additional fields that should be considered private to the implementation):

           typedef struct _ftsent {
               unsigned short  fts_info;     /* flags for FTSENT structure */
               char           *fts_accpath;  /* access path */
               char           *fts_path;     /* root path */
               short           fts_pathlen;  /* strlen(fts_path) +
                                                strlen(fts_name) */
               char           *fts_name;     /* filename */
               short           fts_namelen;  /* strlen(fts_name) */
               short           fts_level;    /* depth (-1 to N) */
               int             fts_errno;    /* file errno */
               long            fts_number;   /* local numeric value */
               void           *fts_pointer;  /* local address value */
               struct _ftsent *fts_parent;   /* parent directory */
               struct _ftsent *fts_link;     /* next file structure */
               struct _ftsent *fts_cycle;    /* cycle structure */
               struct stat    *fts_statp;    /* stat(2) information */
           } FTSENT;

       Estos campos se definen de la siguiente manera:

       fts_info
              Uno de las siguientes valores que describen  la  estructura  FTSENT  devuelta  y  el  fichero  que
              representa.  Con  la  excepción  de  directorios  sin  errores  (FTS_D),  todas estas entradas son
              terminales, es decir, no volverán a ser visitadas, ni tampoco ninguno de sus descendientes.

              FTS_D  Un directorio que está siendo visitado en pre-orden.

              FTS_DC Un directorio que provoca un ciclo en el árbol. (El campo fts_cycle de la estructura FTSENT
                     será rellenado también.)

              FTS_DEFAULT
                     Cualquier estructura FTSENT que represente un tipo de fichero  no  descrito  explícitamente
                     por uno de los otros valores de fts_info.

              FTS_DNR
                     Un  directorio que no puede ser leído. Este valor indica un error y el campo fts_errno será
                     modificado para reflejar la causa del error.

              FTS_DOT
                     Un fichero llamado "." o ".."  que  no  fue  especificado  como  un  nombre  de  fichero  a
                     fts_open() (vea FTS_SEEDOT).

              FTS_DP Un  directorio que está siendo visitado en post-orden. El contenido de la estructura FTSENT
                     será el mismo que el que se devolvió cuando el directorio se visitó en pre-orden, es decir,
                     con el valor FTS_D en el campo fts_info.

              FTS_ERR
                     Este valor indica un error y el campo fts_errno será modificado para reflejar la causa  del
                     error.

              FTS_F  Un fichero regular.

              FTS_NS Un  fichero  para  el  que  no hay información de tipo stat(2) disponible. El contenido del
                     campo fts_statp es indefinido. Este valor  indica  un  error  y  el  campo  fts_errno  será
                     modificado para reflejar la causa del error.

              FTS_NSOK
                     Un  fichero  para el que no se solicitó información de tipo stat(2). El contenido del campo
                     fts_statp es indefinido.

              FTS_SL Un enlace simbólico.

              FTS_SLNONE
                     Un enlace simbólico con un destino inexistente.  El  contenido  del  campo  fts_statp  hace
                     referencia  a  la  información  característica  del  fichero para el enlace simbólico en sí
                     mismo.

       fts_accpath
              Un camino para acceder al fichero desde el directorio actual.

       fts_path
              El camino del fichero  relativo  a  la  raíz  del  recorrido.  Este  caminio  contiene  el  camino
              especificado a fts_open() como prefijo.

       fts_pathlen
              The sum of the lengths of the strings referenced by fts_path and fts_name.

       fts_name
              El nombre del fichero.

       fts_namelen
              La longitud de la cadena referenciada por fts_name.

       fts_level
              La  profundidad  del  recorrido,  numerada desde -1 hasta N, donde fue encontrado este fichero. La
              estructura FTSENT que representa al padre del punto de partida (o raíz) del  recorrido  se  numera
              con -1 y la estructura FTSENT para la raíz en sí misma se numera con 0.

       fts_errno
              If  fts_children()   or  fts_read()   returns  an  FTSENT structure whose fts_info field is set to
              FTS_DNR, FTS_ERR, or FTS_NS, the fts_errno field contains the error number (i.e., the errno value)
              specifying the cause of the error.  Otherwise, the contents of the fts_errno field are undefined.

       fts_number
              Este campo se proporciona para su uso por la aplicación y no es modificado por las funciones  fts.
              Se inicializa a 0.

       fts_pointer
              Este  campo se proporciona para su uso por la aplicación y no es modificado por las funciones fts.
              Se inicializa a NULL.

       fts_parent
              Un puntero a la estructura FTSENT que referencia al fichero en la jerarquía inmediatamente  encima
              del  fichero  actual,  esto  es,  el  directorio  del  cual  es  miembro  este fichero. También se
              proporciona una estructura padre para el punto de entrada inicial, aunque sólo se garantiza que se
              inicializarán los campos fts_level, fts_number y fts_pointer.

       fts_link
              A la vuelta de la función fts_children(), el campo fts_link apunta a la siguiente estructura en la
              lista enlazada terminada en NULL de miembros de directorio. En otro caso, el contenido  del  campo
              fts_link es indefinido.

       fts_cycle
              Si un directorio causa un ciclo en la jerarquía (vea FTS_DC), bien debido a un enlace físico entre
              dos directorios, bien por un enlace simbólico que apunta a un directorio, el campo fts_cycle de la
              estructura  apuntará a la estructura FTSENT en la jerarquía que referencie el mismo fichero que la
              estructura FTSENT actual. En otro caso, el contenido del campo fts_cycle es indefinido.

       fts_statp
              Un puntero a información de tipo stat(2) para el fichero.

       Se utiliza un único buffer para todas las rutas de todos los ficheros en la jerarquía  de  ficheros.  Por
       consiguiente,  se  garantiza  que los campos fts_path y fts_accpath terminan en NULL sólo para el fichero
       más recientemente devuelto por fts_read. Para usar estos campos para referenciar  a  cualesquier  fichero
       representado  por  otra  estructura  FTSENT, será necesario que se modifique el buffer de rutas usando la
       información contenida en el campo fts_pathlen de esa estructura FTSENT. Cualquiera modificación se deberá
       deshacer antes de intentar llamar otra vez a fts_read. El campo fts_name siempre termina en NULL.

   fts_open()
       La función fts_open() acepta un puntero a un array de punteros a carácter designando una o  más  rutas  o
       caminos  que  forman  una  jerarquía  de ficheros lógica a ser recorrida. El array debe terminarse con un
       puntero NULL.

       Hay varias opciones, al menos una de las cuales (bien FTS_LOGICAL o FTS_PHYSICAL) debe ser  especificada.
       Las opciones se seleccionan concatenando con la operación or los siguientes valores:

       FTS_COMFOLLOW
              Esta  opción  hace  que  cualquier  enlace  simbólico especificado como un camino raíz sea seguido
              inmediatamente sin importar que la opción FTS_LOGICAL fuese especificada.

       FTS_LOGICAL
              Esta opción hace que las rutinas fts devuelvan estructuras FTSENT para los destinos de los enlaces
              simbólicos en lugar de para los enlaces simbólicos en sí mismos. Si esta opción está presente, los
              únicos enlaces simbólicos para los que  se  devuelven  estructuras  FTSENT  a  la  aplicación  son
              aquellos  que  hacen  referencia  a  ficheros  no  existentes.  A  la  función fts_open se le debe
              especificar bien FTS_LOGICAL, bien FTS_PHYSICAL.

       FTS_NOCHDIR
              Para mejorar el rendimiento, las funciones fts cambian de directorio según recorren  la  jerarquía
              de  ficheros.  Esto  tiene el efecto secundario de que una aplicación no puede confiar en estar en
              ningún directorio en particular  durante  el  recorrido.  La  opción  FTS_NOCHDIR  desactiva  esta
              optimización  y  las funciones fts no cambiarán el directorio actual. Observe que las aplicaciones
              no deberían por sí mismas cambiar su directorio actual e intentar acceder a los ficheros  a  menos
              que se especifique la opción FTS_NOCHDIR y se pasen caminos de fichero absolutos como argumentos a
              fts_open().

       FTS_NOSTAT
              Por  defecto,  las  estructuras FTSENT devueltas hacen referencia a información característica del
              fichero (el campo statp) para cada fichero visitado. Esta opción relaja ese requisito para mejorar
              del rendimiento, permitiendo a las funciones fts establecer el campo fts_info al valor FTS_NSOK  y
              dejar el contenido del campo statp indefinido.

       FTS_PHYSICAL
              Esta  opción  hace que las rutinas fts devuelvan estructuras FTSENT para los enlaces simbólicos en
              sí mismos en lugar de para los ficheros destino a los que apuntan. Si esta opción  está  presente,
              se devuelven a la aplicación estructuras FTSENT para todos los enlaces simbólicos en la jerarquía.
              A la función fts_open() se le debe especificar bien FTS_LOGICAL, bien FTS_PHYSICAL.

       FTS_SEEDOT
              Por defecto, a menos que se especifiquen como argumentos de camino a fts_open(), cualquier fichero
              con nombre "." o ".." encontrado en la jerarquía de ficheros es ignorado. Esta opción hace que las
              rutinas fts devuelvan estructuras FTSENT para ellos.

       FTS_XDEV
              Esta opción evita que las rutinas fts desciendan a directorios que tienen un número de dispositivo
              diferente del fichero en el cual comienza el descenso.

       El  argumento compar() especifica una función definida por el usuario que puede ser usada para ordenar el
       recorrido de la jerarquía. Acepta dos punteros a punteros a estructuras FTSENT como argumentos y  debería
       devolver  un  valor  negativo,  cero  o un valor positivo para indicar que el fichero referenciado por su
       primer argumento va antes, en cualquier orden con respecto a, o después del fichero referenciado  por  su
       segundo  argumento.  Los campos fts_accpath, fts_path y fts_pathlen de las estructuras FTSENT nunca deben
       utilizarse en esta comparación. Si el campo fts_info tiene un valor FTS_NS o FTS_NSOK, el  campo  tampoco
       debe  usarse. Si el argumento compar() vale NULL, el orden de recorrido de los directorios es en el orden
       listado en path_argv para los caminos raíz, y en el orden de aparición en el  directorio  para  cualquier
       otro.

   fts_read()
       La  función  fts_read()  devuelve  un  puntero  a  una  estructura  FTSENT  describiendo un fichero de la
       jerarquía. Los directorios (que pueden leerse y no causan ciclos) son visitados al menos dos  veces,  una
       vez  en  pre-orden  y  otra  en post-orden. Todos los demás ficheros son visitados al menos una vez. (Los
       enlaces físicos entre directorios que no causan ciclos o los  enlaces  simbólicos  a  enlaces  simbólicos
       pueden hacer que haya ficheros que se visiten más de una vez o directorios que se visiten más de dos.)

       Si todos los miembros de la jerarquía han sido devueltos, fts_read() devuelve NULL y asigna a la variable
       externa  errno  el  valor 0. Si ocurre un error no relacionado con un fichero en la jerarquía, fts_read()
       devuelve NULL y modifica errno de manera apropiada.  Si  ocurre  un  error  relacionado  con  un  fichero
       devuelto,  se  devuelve  un  puntero  a  una  estructura FTSENT y errno puede o no tomar algún valor (vea
       fts_info).

       Las estructuras FTSENT devueltas por  fts_read()  pueden  ser  sobrescritas  después  de  una  llamada  a
       fts_close()  sobre el mismo flujo de jerarquía de ficheros o después de una llamada a fts_read() sobre el
       mismo flujo de jerarquía de ficheros, a menos que representen un fichero de tipo directorio en cuyo  caso
       no serán sobrescritas hasta después de una llamada a fts_read(), después de que la estructura FTSENT haya
       sido devuelta por la función fts_read() en post-orden.

   fts_children()
       La  función fts_children() devuelve un puntero a una estructura FTSENT describiendo la primera entrada de
       una lista enlazada terminada en NULL de los ficheros en el  directorio  representado  por  la  estructura
       FTSENT  más  recientemente  devuelta  por fts_read(). La lista se enlaza mediante el campo fts_link de la
       estructura FTSENT y es ordenada por la función de comparación definida por el usuario, si se  especifica.
       Llamadas repetidas a fts_children() volverán a crear esta lista enlazada.

       Como  caso especial, si fts_read() no ha sido llamada aún para una jerarquía, fts_children() devolverá un
       puntero a los ficheros en el directorio lógico  especificado  a  fts_open(),  es  decir,  los  argumentos
       especificados  a  fts_open().  En  otro  caso,  si  la  estructura  FTSENT más recientemente devuelta por
       fts_read() no es un directorio que se está visitado en pre-orden, o  el  directorio  no  contiene  ningún
       fichero, fts_children() devuelve NULL y modifica errno con valor cero. Si ocurre un error, fts_children()
       devuelve NULL y modifica errno con el valor apropiado.

       Las  estructuras  FTSENT  devueltas  por  fts_children()  pueden  ser  sobrescritas  tras  una  llamada a
       fts_children(), fts_close() o fts_read() sobre el mismo flujo de jerarquía de ficheros.

       The instr argument is either zero or the following value:

       FTS_NAMEONLY
              Sólo se necesitan los nombres de los ficheros. El contenido  de  todos  los  campos  en  la  lista
              enlazada  devuelta  de  estructuras  es  indefinido  con  la  excepción  de  los campos fts_name y
              fts_namelen.

   fts_set()
       The function fts_set()  allows the user application to determine further processing for the file f of the
       stream ftsp.  The fts_set() function returns 0 on success, and -1 if an error occurs.

       The instr argument is either 0 (meaning "do nothing") or one of the following values:

       FTS_AGAIN
              Revisitar el fichero; cualquier tipo de fichero puede  ser  revisitado.  La  siguiente  llamada  a
              fts_read()  devolverá  el  fichero  referenciado.  Los campos fts_stat y fts_info de la estructura
              serán reincializados,  pero  los  demás  campos  no  sufrirán  cambios.  Esta  opción  sólo  tiene
              significado  para  el  fichero más recientemente devuelto por fts_read(). El uso normal de esto es
              para las visitas de directorios en post-orden, donde provoca  que  se  revisiten  los  directorios
              (tanto en pre-orden como en post-orden) así como todos sus descendientes.

       FTS_FOLLOW
              El  fichero  referenciado  debe  ser  un enlace simbólico. Si el fichero referenciado es aquel más
              recientemente devuelto por fts_read(), la siguiente llamada a fts_read() devuelve el  fichero  con
              los  campos  fts_info y fts_statp reinicializados para reflejar el destino del enlace simbólico en
              lugar del enlace simbólico en sí mismo. Si  el  fichero  es  uno  de  aquellos  más  recientemente
              devueltos  por  fts_children(),  los  campos  fts_info  y  fts_statp  de la estructura, cuando son
              devueltos por fts_read(), reflejarán el destino del enlace simbólico en lugar del enlace simbólico
              en sí mismo. En ambos casos, si el destino del enlace  simbólico  no  existe,  los  campos  de  la
              estructura devuelta permanecerán sin cambios y el campo fts_info valdrá FTS_SLNONE.

              Si  el  fichero al que apunta el enlace simbólico es un directorio, se devuelve el resultado de la
              visita en pre-orden, seguido de los resultados de todos sus descendientes, seguidos del  resultado
              de la visita en post-orden.

       FTS_SKIP
              No  se  visita  a  los  descendientes  de  este  fichero.  El fichero debe ser uno de aquellos más
              recientemente devueltos por fts_children() o fts_read().

   fts_close()
       The fts_close()  function closes the file hierarchy stream referred to by ftsp and restores  the  current
       directory  to  the  directory  from which fts_open()  was called to open ftsp.  The fts_close()  function
       returns 0 on success, and -1 if an error occurs.

ERRORES

       The function fts_open()  may fail and set errno  for  any  of  the  errors  specified  for  open(2)   and
       malloc(3).

       The  function  fts_close()   may  fail  and  set  errno for any of the errors specified for chdir(2)  and
       close(2).

       The functions fts_read()  and fts_children()  may fail and set errno for any of the errors specified  for
       chdir(2), malloc(3), opendir(3), readdir(3), and stat(2).

       Además, fts_children(), fts_open() y fts_set() pueden fallar y modificar errno como sigue:

       EINVAL options or instr was invalid.

VERSIONES

       Estas funciones están disponibles en Linux desde glibc2.

ATRIBUTOS

       Para obtener una explicación de los términos usados en esta sección, véase attributes(7).
       ┌────────────────────────────────────┬────────────────────┬───────────────────┐
       │ InterfazAtributoValor             │
       ├────────────────────────────────────┼────────────────────┼───────────────────┤
       │ fts_open(), fts_set(), fts_close() │ Seguridad del hilo │ Multi-hilo seguro │
       ├────────────────────────────────────┼────────────────────┼───────────────────┤
       │ fts_read(), fts_children()         │ Seguridad del hilo │ MT-Unsafe         │
       └────────────────────────────────────┴────────────────────┴───────────────────┘

CONFORME A

       4.4BSD.

ERRORES

       In  versions of glibc before 2.23, all of the APIs described in this man page are not safe when compiling
       a program using the LFS APIs (e.g., when compiling with -D_FILE_OFFSET_BITS=64).

VÉASE TAMBIÉN

       find(1), chdir(2), stat(2), ftw(3), qsort(3)

COLOFÓN

       Esta página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar una descripción del
       proyecto,  información  sobre  cómo  informar  errores  y  la  última   versión   de   esta   página   en
       https://www.kernel.org/doc/man-pages/.

TRADUCCIÓN

       La traducción al español de esta página del manual fue creada por Miguel Pérez Ibars <mpi79470@alu.um.es>

       Esta  traducción  es  documentación  libre;  lea  la GNU General Public License Version 3 o posterior con
       respecto a las condiciones de copyright.  No existe NINGUNA RESPONSABILIDAD.

       Si encuentra algún error en la traducción de esta página  del  manual,  envíe  un  correo  electrónico  a
       debian-l10n-spanish@lists.debian.org.

Linux                                             11 Abril 2020                                           FTS(3)