4.3BSD-Reno/share/man/cat3/fts.0

Compare this file to the similar file:
Show the results in this format:




FTS(3)			      1990			   FTS(3)



NNAAMMEE
     fts - traverse a file hierarchy

SSYYNNOOPPSSIISS
     ##iinncclluuddee <<ssyyss//ttyyppeess..hh>>
     ##iinncclluuddee <<ssyyss//ssttaatt..hh>>
     ##iinncclluuddee <<ffttss..hh>>

     FFTTSS **
     ffttssooppeenn((ppaatthh__aarrggvv,, ooppttiioonnss,, ccoommppaarr))
     cchhaarr **ppaatthh__aarrggvv[[]];;
     iinntt ooppttiioonnss,, ((**ccoommppaarr))(());;

     FFTTSSEENNTT **
     ffttssrreeaadd((ffttsspp));;
     FFTTSS **ffttsspp;;

     FFTTSSEENNTT **
     ffttsscchhiillddrreenn((ffttsspp))
     FFTTSS **ffttsspp;;

     ffttsssseett((ffttsspp,, ff,, ooppttiioonnss))
     FFTTSS **ffttsspp;;
     FFTTSSEENNTT **ff;;
     iinntt ooppttiioonnss;;

     ffttsscclloossee((ffttsspp))
     FFTTSS **ffttsspp;;

DDEESSCCRRIIPPTTIIOONN
     The _f_t_s(3) utilities are provided for traversing UNIX file
     hierarchies.  Two structures are defined (and typedef'd) in
     the include file <_f_t_s._h>.	The first is FTS, the structure
     that defines the file hierarchy stream.  The second is
     FTSENT, the structure that defines a file in the file
     hierarchy.

     The _f_t_s_o_p_e_n routine takes a pointer to an array of character
     pointers (``argv'') naming the file hierarchies to be
     traversed.  The array must be terminated by a pointer to a
     NULL string.

     The _o_p_t_i_o_n_s specified are formed by _o_r'ing one or more of
     the following values:

     FTS_LOGICAL
	  This option causes _f_t_s_r_e_a_d to use the function _s_t_a_t(2),
	  by default, to determine the status of each file.  If
	  this option is set, the only symbolic links returned to
	  the application are those referencing non-existent
	  files.  Either FTS_LOGICAL or FTS_PHYSICAL mmuusstt be pro-
	  vided to the _f_t_s_o_p_e_n routine.



Printed 7/27/90               June				1






FTS(3)			      1990			   FTS(3)



     FTS_NOCHDIR
	  As a performance optimization, _f_t_s_r_e_a_d changes direc-
	  tories as it descends the hierarchy.	This has the
	  side-effect that applications cannot rely on being in
	  any particular directory.  The FTS_NOCHDIR option turns
	  off this optimization.  Note that applications should
	  not change the current directory (even if FTS_NOCHDIR
	  is specified) unless absolute pathnames were provided
	  as arguments to _f_t_s_o_p_e_n.

     FTS_NOSTAT
	  By default, _f_t_s_r_e_a_d and _f_t_s_c_h_i_l_d_r_e_n provide file
	  characteristic information (the _s_t_a_t_b field) for each
	  file they return.  This option relaxes that require-
	  ment; the contents of the _s_t_a_t_b field may be undefined,
	  and the _i_n_f_o field may be set to FTS_NS.

     FTS_PHYSICAL
	  This option causes _f_t_s_r_e_a_d to use the function
	  _l_s_t_a_t(2), by default, to determine the status of each
	  file.  If this option is set, all symbolic links are
	  returned to the application program.	Either
	  FTS_LOGICAL or FTS_PHYSICAL mmuusstt be provided to the
	  _f_t_s_o_p_e_n routine.

     FTS_SEEDOT
	  This option causes the routine _f_t_s_r_e_a_d to return struc-
	  tures for the directory entries ``.'' and ``..''.  By
	  default they are ignored unless specified as an argu-
	  ment to _f_t_s_o_p_e_n.

     FTS_XDEV
	  This option keeps _f_t_s from descending into directories
	  that have a different device number than the file the
	  descent began from.

     The argument _c_o_m_p_a_r specifies a user-defined routine which
     is used to order the traversal of directories.  _C_o_m_p_a_r takes
     two pointers to pointers to FTSENT structures as arguments
     and should return a negative value, zero, or a positive
     value to indicate if the file referenced by its first argu-
     ment comes before, in any order with respect to, or after,
     the file referenced by its second argument.

     The _f_t_s__a_c_c_p_a_t_h and _f_t_s__p_a_t_h fields of the FTSENT structures
     may not be used in this comparison.  If the option
     _F_T_S__N_O_S_T_A_T is specified, the _f_t_s__s_t_a_b field may not be used
     as well.  If the _c_o_m_p_a_r argument is NULL the directory
     traversal order is unspecified except for the root paths
     which are traversed in the order listed in _p_a_t_h__a_r_g_v.





Printed 7/27/90               June				2






FTS(3)			      1990			   FTS(3)



     The _f_t_s_c_l_o_s_e routine closes a file hierarchy stream and
     changes the current directory to the directory _f_t_s_o_p_e_n was
     called from.  _F_t_s_c_l_o_s_e returns 0 on success, and -1 if an
     error occurs.

     Each call to the _f_t_s_r_e_a_d routine returns a pointer to an
     FTSENT structure describing a file in the hierarchy.  Direc-
     tories (that are readable, searchable and do not cause
     cycles) are visited at least twice, before any of their des-
     cendants have been visited (pre-order) and after all their
     descendants have been visited (post-order).  All other files
     are visited at least once.

     The FTSENT structure contains at least the following fields:

	  typedef struct ftsent {
	       struct ftsent *fts_parent;    /* parent structure */
	       struct ftsent *fts_link;      /* cycle or file structure */
	       union {
		    long number;	     /* local numeric value */
		    void *pointer;	     /* local address value */
	       } fts_local;
	       char *fts_accpath;	     /* path from current directory */
	       char *fts_path;		     /* path from starting directory */
	       char *fts_name;		     /* file name */
	       short fts_pathlen;	     /* strlen(path) */
	       short fts_namelen;	     /* strlen(name) */
	       short fts_level;              /* depth (-1 to N) */
	       unsigned short fts_info;      /* flags for entry */
	       struct stat fts_statb;	     /* stat(2) information */
	  } FTSENT;

     The fields are as follows:

     fts_parent
	  A pointer to a structure referencing the file in the
	  hierarchy immediately above the current file/structure.
	  A parent structure for the initial entry point is pro-
	  vided as well, however, only the _f_t_s__l_o_c_a_l and
	  _f_t_s__l_e_v_e_l fields are guaranteed to be initialized.

     fts_link
	  If a directory causes a cycle in the hierarchy, either
	  because of a hard link between two directories, or a
	  symbolic link pointing to a directory, the _f_t_s__l_i_n_k
	  field of the structure will point to the structure in
	  the hierarchy that references the same file as the
	  current structure.  Upon return from the _f_t_s_c_h_i_l_d_r_e_n
	  routine, the _f_t_s__l_i_n_k field points to the next struc-
	  ture in the linked list of entries from the directory.
	  Otherwise, the contents of the _f_t_s__l_i_n_k field are unde-
	  fined.



Printed 7/27/90               June				3






FTS(3)			      1990			   FTS(3)



     fts_local
	  This field is provided for the use of the application
	  program.  It can be used to store either a long value
	  or an address.

     fts_accpath
	  A path that can be used to access the file.

     fts_path
	  The path for the file relative to the root of the
	  traversal.

     fts_name
	  The basename of the file.

     fts_pathlen
	  The length of the string referenced by _f_t_s__p_a_t_h.

     fts_namelen
	  The length of the string referenced by _f_t_s__n_a_m_e.

     fts_level
	  The depth of the traversal, numbered from -1 to N.  The
	  parent structure of the root of the traversal is num-
	  bered -1, and the structure for the root of the traver-
	  sal is numbered 0.

     fts_info
	  Information describing the file.  With the exception of
	  directories (FTS_D), all of these entries are terminal,
	  i.e. they will not be revisited, nor will their descen-
	  dants be visited (if they have not been visited
	  already).

	  FTS_D
	       A directory being visited in pre-order.

	  FTS_DC
	       A directory that causes a cycle.  The _f_t_s__l_i_n_k
	       field of the structure will be filled in as well.

	  FTS_DEFAULT
	       Anything that's not one of the others.

	  FTS_DNR
	       A directory that cannot be read.

	  FTS_DNX
	       A directory that cannot be searched.

	  FTS_DOT
	       A file named ``.'' or ``..'' with a _f_t_s__l_e_v_e_l



Printed 7/27/90               June				4






FTS(3)			      1990			   FTS(3)



	       field not equal to zero, i.e. one not specified as
	       an argument to _f_t_s_o_p_e_n.	(See FTS_SEEDOT.)

	  FTS_DP
	       A directory that is being visited in post-order.
	       The contents of the structure will be unchanged
	       from when the directory was visited in pre-order.

	  FTS_ERR
	       An error indicator; the external variable _e_r_r_n_o
	       contains an error number indicating the reason for
	       the error.

	  FTS_F
	       A regular file.

	  FTS_NS
	       No _s_t_a_t(2) information is available at this time
	       (see FTS_NOSTAT); the contents of the _f_t_s__s_t_a_t_b
	       field are undefined.

	  FTS_SL
	       A symbolic link.

	  FTS_SLNONE
	       A symbolic link with a non-existent target.

     fts_statb
	  _S_t_a_t(2) information for the file.

     The _f_t_s__a_c_c_p_a_t_h and _f_t_s__p_a_t_h fields are guaranteed to be
     NULL-terminated oonnllyy for the file most recently returned by
     _f_t_s_r_e_a_d.  The _f_t_s__n_a_m_e field is always NULL-terminated.  To
     use these fields to reference any other active files may
     require that they be modified using the information con-
     tained in the _f_t_s__p_a_t_h_l_e_n field.  Any such modifications
     should be undone before further calls to _f_t_s_r_e_a_d are
     attempted.

     If all the members of the hierarchy have been returned,
     _f_t_s_r_e_a_d returns NULL and sets the external variable _e_r_r_n_o to
     0.  If an error unrelated to a file in the hierarchy occurs,
     _f_t_s_r_e_a_d returns NULL and sets errno appropriately.  Other-
     wise, a pointer to an FTSENT structure is returned, and an
     error may or may not have occurred; see FTS_ERR above.

     When the most recently returned file from _f_t_s_r_e_a_d is a
     directory being visited in pre-order, _f_t_s_c_h_i_l_d_r_e_n returns a
     pointer to the first entry in a linked list (sorted by the
     comparison routine, if provided) of the directory entries it
     contains.	The linked list is linked through the _f_t_s__l_i_n_k
     field of the FTSENT structure.  Each call to _f_t_s_c_h_i_l_d_r_e_n



Printed 7/27/90               June				5






FTS(3)			      1990			   FTS(3)



     recreates the list.  Note, cycles are not detected until a
     directory is actually visited, therefore _f_t_s_c_h_i_l_d_r_e_n will
     never return a structure with an _f_t_s__i_n_f_o field set to
     FTS_DC.  If the current file is not a directory being
     visited in pre-order, or if an error occurs, or the file
     does not contain any entries _f_t_s_c_h_i_l_d_r_e_n returns NULL.  If
     an error occurs, _f_t_s_c_h_i_l_d_r_e_n sets errno appropriately, oth-
     erwise it sets errno to zero.

     The pointers returned by _f_t_s_r_e_a_d and _f_t_s_c_h_i_l_d_r_e_n point to
     structures which may be overwritten.  Structures returned by
     _f_t_s_c_h_i_l_d_r_e_n and _f_t_s_r_e_a_d may be overwritten after a call to
     _f_t_s_c_l_o_s_e on the same file hierarchy.  Otherwise, structures
     returned by _f_t_s_c_h_i_l_d_r_e_n will not be overwritten until a sub-
     sequent call to either _f_t_s_c_h_i_l_d_r_e_n or _f_t_s_r_e_a_d on the same
     file hierarchy.  Structures returned by _f_t_s_r_e_a_d will not not
     be overwritten until a subsequent call to _f_t_s_r_e_a_d on the
     same file hierarchy stream, unless it represents a file of
     type directory, in which case it will not be overwritten
     until after a subsequent call to _f_t_s_r_e_a_d after it has been
     returned by the function _f_t_s_r_e_a_d in post-order.

     The routine _f_t_s_s_e_t allows the user application to determine
     further processing for the file _f of the stream _f_t_s_p.
     _F_t_s_s_e_t returns 0 on success, and -1 if an error occurs.
     _O_p_t_i_o_n may be set to any one of the following values.

     FTS_AGAIN
	  Re-visit the file; any file type may be re-visited.
	  The next call to _f_t_s_r_e_a_d will return the referenced
	  file.  The _f_t_s__s_t_a_t and _f_t_s__i_n_f_o fields of the struc-
	  ture will be reinitialized at that time, but no other
	  fields will have been modified.  This option is mean-
	  ingful only for the most recently returned file from
	  _f_t_s_r_e_a_d.  Normal use is for post-order directory
	  visits, where it causes the directory to be re-visited
	  (in both pre and post-order) as well as all of its des-
	  cendants.

     FTS_FOLLOW
	  The referenced file must be a symbolic link.	If the
	  referenced file is the one most recently returned by
	  _f_t_s_r_e_a_d, the next call to _f_t_s_r_e_a_d returns the file with
	  the _f_t_s__i_n_f_o and _f_t_s__s_t_a_t_b fields reinitialized to
	  reflect the target of the symbolic link instead of the
	  symbolic link itself.  If the file is one of those most
	  recently returned by _f_t_s_c_h_i_l_d_r_e_n, the _f_t_s__i_n_f_o and
	  _f_t_s__s_t_a_t_b fields of the structure, when returned by
	  _f_t_s_r_e_a_d, will reflect the target of the symbolic link
	  instead of the symbolic link itself.	In either case,
	  if the target of the link is a directory, the pre-order
	  return, followed by the return of all of its



Printed 7/27/90               June				6






FTS(3)			      1990			   FTS(3)



	  descendants, followed by a post-order return, is done.

     FTS_SKIP
	  No descendants of this file are visited.

     Hard links between directories that do not cause cycles or
     symbolic links to symbolic links may cause files to be
     visited more than once, or directories more than twice.

EERRRROORRSS
     _F_t_s_o_p_e_n may fail and set errno for any of the errors speci-
     fied for the library routine _m_a_l_l_o_c(3).

     _F_t_s_c_l_o_s_e may fail and set errno for any of the errors speci-
     fied for the library routine _c_h_d_i_r(2).

     _F_t_s_r_e_a_d and _f_t_s_c_h_i_l_d_r_e_n may fail and set errno for any of
     the errors specified for the library routines _c_h_d_i_r(2), _g_e_t_-
     _g_r_o_u_p_s(2), _m_a_l_l_o_c(3), _o_p_e_n_d_i_r(3), _r_e_a_d_d_i_r(3) and _s_t_a_t(2).

SSEEEE AALLSSOO
     find(1), chdir(2), stat(2), qsort(3)

SSTTAANNDDAARRDDSS
     The _f_t_s utility is expected to be a superset of the POSIX
     1003.1 specification.





























Printed 7/27/90               June				7