home *** CD-ROM | disk | FTP | other *** search
-
- FTS(3) UNIX Programmer's Manual FTS(3)
-
- NNAAMMEE
- ffttss - traverse a file hierarchy
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<ssyyss//ttyyppeess..hh>>
- ##iinncclluuddee <<ssyyss//ssttaatt..hh>>
- ##iinncclluuddee <<ffttss..hh>>
-
- _F_T_S _*
- ffttss__ooppeenn(_c_h_a_r _* _c_o_n_s_t _*_p_a_t_h___a_r_g_v, _i_n_t _o_p_t_i_o_n_s,
- _i_n_t _*_c_o_m_p_a_r_(_c_o_n_s_t _F_T_S_E_N_T _*_, _c_o_n_s_t _F_T_S_E_N_T _*_))
-
- _F_T_S_E_N_T _*
- ffttss__rreeaadd(_F_T_S _*_f_t_s_p)
-
- _F_T_S_E_N_T _*
- ffttss__cchhiillddrreenn(_F_T_S _*_f_t_s_p)
-
- _i_n_t
- ffttss__sseett(_F_T_S _f_t_s_p, _F_T_S_E_N_T _*_f, _i_n_t _o_p_t_i_o_n_s)
-
- _i_n_t
- ffttss__cclloossee(_F_T_S _*_f_t_s_p)
-
- DDEESSCCRRIIPPTTIIOONN
- The ffttss functions are provided for traversing UNIX file hierarchies.
-
- The simple overview is that the ffttss__ooppeenn() function returns a ``handle''
- on a file hierarchy, which is supplied to the other ffttss functions to de
- termine which hierarchy they operate on. The function ffttss__rreeaadd() returns
- a pointer to a structure describing one of the files in the file hierar
- chy. The function ffttss__cchhiillddrreenn() returns a pointer to a linked list of
- structures, each of which describes one of the files contained in a di
- rectory in the hierarchy. In general, directories are visited two dis
- tinguishable times; in preorder (before any of their descendants are
- visited) and in postorder (after all of their descendants have been vis
- ited). Files are visited once. It is possible to walk the hierarchy
- ``logically'' (ignoring symbolic links) or physically (visiting symbolic
- links), order the walk of the hierarchy or prune and/or revisit portions
- of the hierarchy.
-
- Two structures are defined (and typedef'd) in the include file <_f_t_s_._h>.
- The first is _F_T_S, the structure that represents the file hierarchy
- stream. The second is _F_T_S_E_N_T, the structure that represents a file in
- the file hierarchy. Normally, an _F_T_S_E_N_T structure is returned for every
- file in the file hierarchy. In this manual page, ``file'' and ``_F_T_S_E_N_T
- structure'' are generally interchangeable. The _F_T_S_E_N_T structure contains
- at least the following fields, which are described in greater detail be
- low:
-
- typedef struct _ftsent {
- u_short fts_info; /* flags for FTSENT structure */
- char *fts_accpath; /* access path */
- char *fts_path; /* root path */
- short fts_pathlen; /* strlen(fts_path) */
- char *fts_name; /* file name */
- short fts_namelen; /* strlen(fts_name) */
- short fts_level; /* depth (-1 to N) */
- long fts_number; /* local numeric value */
- void *fts_pointer; /* local address value */
- struct ftsent *fts_parent; /* parent directory */
- struct ftsent *fts_link; /* cycle or next file structure */
- struct stat fts_statb; /* stat(2) information */
- } FTSENT;
-
- These fields are defined as follows:
-
- _f_t_s___i_n_f_o One of the following flags describing the returned _F_T_S_E_N_T
- structure and the file it represents. With the exception of
- directories without errors (FTS_D), all of these entries are
- terminal, that is, they will not be revisited, nor will any
- of their descendants be visited.
-
- FTS_D A directory being visited in preorder.
-
- FTS_DC A directory that causes a cycle in the tree.
- (The _f_t_s___l_i_n_k field of the _F_T_S_E_N_T structure
- will be filled in as well.)
-
- FTS_DEFAULT Any _F_T_S_E_N_T structure that represents a file
- type not explicitly described by one of the
- other _f_t_s___i_n_f_o values.
-
- FTS_DNR A directory which cannot be read. An error re
- turn; the external variable _e_r_r_n_o will be set
- to indicate the error.
-
- FTS_DOT A file named `.' or `..' which was not speci
- fied as a file name to ffttss__ooppeenn() (see
- FTS_SEEDOT).
-
- FTS_DP A directory being visited in postorder. The
- contents of the _F_T_S_E_N_T structure will be un
- changed from when it was returned in preorder,
- i.e. with the _f_t_s___i_n_f_o field set to FTS_D.
-
- FTS_ERR An error return; the external variable _e_r_r_n_o
- will be set to indicate the error.
-
- FTS_F A regular file.
-
- FTS_NS A file for which no stat(2) information was
- available. The contents of the _f_t_s___s_t_a_t_b field
- are undefined. An error return; the external
- variable _e_r_r_n_o will be set to indicate the er
- ror.
-
- FTS_NSOK A file for which no stat(2) information was re
- quested. 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 nonexistent target.
- The contents of the _f_t_s___s_t_a_t_b field contain the
- file characteristic information for the symbol
- ic link itself.
-
- _f_t_s___a_c_c_p_a_t_h A path for accessing the file from the current directory.
-
- _f_t_s___p_a_t_h The path for the file relative to the root of the traversal.
- This path contains the path specified to ffttss__ooppeenn() as a
- prefix.
-
- _f_t_s___p_a_t_h_l_e_n The length of the string referenced by _f_t_s___p_a_t_h.
-
-
-
- _f_t_s___n_a_m_e The name of the file.
-
- _f_t_s___n_a_m_e_l_e_n The length of the string referenced by _f_t_s___n_a_m_e.
-
- _f_t_s___l_e_v_e_l The depth of the traversal, numbered from -1 to N, where
- this file was found. The _F_T_S_E_N_T structure representing the
- parent of the starting point (or root) of the traversal is
- numbered -1, and the _F_T_S_E_N_T structure for the root itself is
- numbered 0.
-
- _f_t_s___n_u_m_b_e_r This field is provided for the use of the application pro
- gram and is not modified by the ffttss functions. It is ini
- tialized to 0. The fields _f_t_s___n_u_m_b_e_r and _f_t_s___p_o_i_n_t_e_r occupy
- the same physical location; using both may cause undefined
- results.
-
- _f_t_s___p_o_i_n_t_e_r This field is provided for the use of the application pro
- gram and is not modified by the ffttss functions. It is ini
- tialized to NULL. The fields _f_t_s___n_u_m_b_e_r and _f_t_s___p_o_i_n_t_e_r oc
- cupy the same physical location; using both may cause unde
- fined results.
-
- _f_t_s___p_a_r_e_n_t A pointer to the _F_T_S_E_N_T structure referencing the file in
- the hierarchy immediately above the current file, i.e. the
- directory of which this file is a member. A parent struc
- ture for the initial entry point is provided as well, howev
- er, only the _f_t_s___l_e_v_e_l, _f_t_s___n_u_m_b_e_r and _f_t_s___p_o_i_n_t_e_r fields
- are guaranteed to be initialized.
-
- _f_t_s___l_i_n_k The _f_t_s___l_i_n_k field has two separate uses. If a directory
- causes a cycle in the hierarchy (see FTS_DC), 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 _F_T_S_E_N_T structure in the hierarchy that
- references the same file as the current _F_T_S_E_N_T structure.
- Also, upon return from the ffttss__cchhiillddrreenn() function, the
- _f_t_s___l_i_n_k field points to the next structure in the linked
- list of directory members. Otherwise, the contents of the
- _f_t_s___l_i_n_k field are undefined.
-
- _f_t_s___s_t_a_t_b Stat(2) information for the file.
-
- FFTTSS__OOPPEENN
- The ffttss__ooppeenn() function takes a pointer to an array of character pointers
- naming one or more paths which make up a logical file hierarchy to be
- traversed. The array must be terminated by a NULL pointer.
-
- There are a number of options, at least one of which (either FTS_LOGICAL
- or FTS_PHYSICAL) must be specified. The options are selected by _o_r'ing
- the following values:
-
- FTS_LOGICAL This option causes the ffttss routines to return _F_T_S_E_N_T struc
- tures for the targets of symbolic links instead of the sym
- bolic links themselves. If this option is set, the only
- symbolic links for which _F_T_S_E_N_T structures are returned to
- the application are those referencing nonexistent files.
- Either FTS_LOGICAL or FTS_PHYSICAL _m_u_s_t be provided to the
- ffttss__ooppeenn() function.
-
- FTS_NOCHDIR As a performance optimization, the ffttss functions change di
- rectories as they walk the file hierarchy. This has the
- sideeffect that an application cannot rely on being in any
- particular directory during the traversal. The FTS_NOCHDIR
- option turns off this optimization, and the ffttss functions
- will not change the current directory. Note that applica
- tions should not themselves change their current directory
- and try to access files unless FTS_NOCHDIR is specified and
- absolute pathnames were provided as arguments to
- ffttss__ooppeenn().
-
- FTS_NOSTAT By default, returned _F_T_S_E_N_T structures contain file charac
- teristic information (the _s_t_a_t_b field) for each file visit
- ed. This option relaxes that requirement as a performance
- optimization, allowing the ffttss functions to set the
- _f_t_s___i_n_f_o field to FTS_NSOK and leave the contents of the
- _s_t_a_t_b field undefined.
-
- FTS_PHYSICAL This option causes the ffttss routines to return _F_T_S_E_N_T struc
- tures for symbolic links themselves instead of the target
- files they point to. If this option is set, _F_T_S_E_N_T struc
- tures for all symbolic links in the hierarchy are returned
- to the application. Either FTS_LOGICAL or FTS_PHYSICAL
- _m_u_s_t be provided to the ffttss__ooppeenn() function.
-
- FTS_SEEDOT By default, unless they are specified as path arguments to
- ffttss__ooppeenn(), any files named `.' and `..' encountered in the
- file hierarchy are ignored. This option causes the ffttss
- routines to return _F_T_S_E_N_T structures for them.
-
- FTS_XDEV This option prevents ffttss from descending into directories
- that have a different device number than the file from
- which the descent began.
-
- The argument ccoommppaarr() specifies a userdefined function which may be used
- to order the traversal of the hierarchy. It takes two pointers to point
- ers to _F_T_S_E_N_T structures as arguments and should return a negative value,
- zero, or a positive value to indicate if the file referenced by its first
- argument 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, _f_t_s___p_a_t_h and
- _f_t_s___p_a_t_h_l_e_n fields of the _F_T_S_E_N_T structures may _n_e_v_e_r be used in this
- comparison. If the _f_t_s___i_n_f_o field is set to FTS_NS or the _f_t_s___s_t_a_b field
- may not either. If the ccoommppaarr() argument is NULL, the directory traver
- sal order is unspecified except for the root paths which are traversed in
- the order listed in _p_a_t_h___a_r_g_v.
-
- FFTTSS__RREEAADD
- The ffttss__rreeaadd() function returns a pointer to an _F_T_S_E_N_T structure describ
- ing a file in the hierarchy. Directories (that are readable and do not
- cause cycles) are visited at least twice, once in preorder and once in
- postorder. All other files are visited at least once. (Hard links be
- tween 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.)
-
- If all the members of the hierarchy have been returned, ffttss__rreeaadd() re
- turns NULL and sets the external variable _e_r_r_n_o to 0. If an error unre
- lated to a file in the hierarchy occurs, ffttss__rreeaadd() returns NULL and sets
- _e_r_r_n_o appropriately. If an error related to a returned file occurs, a
- pointer to an _F_T_S_E_N_T structure is returned, and _e_r_r_n_o may or may not have
- been set (see _f_t_s___i_n_f_o).
-
- The _F_T_S_E_N_T structures returned by ffttss__rreeaadd() may be overwritten after a
- call to ffttss__cclloossee() on the same file hierarchy stream, or, after a call
- to ffttss__rreeaadd() on the same file hierarchy stream unless they represent a
- file of type directory, in which case they will not be overwritten until
- after a call to ffttss__rreeaadd() after the _F_T_S_E_N_T structure has been returned
- by the function ffttss__rreeaadd() in postorder.
-
- FFTTSS__CCHHIILLDDRREENN
- The ffttss__cchhiillddrreenn() function returns a pointer to an _F_T_S_E_N_T structure de
- scribing the first entry in a linked list of the files in the directory
- represented by the _F_T_S_E_N_T structure most recently returned by ffttss__rreeaadd().
- The list is linked through the _f_t_s___l_i_n_k field of the _F_T_S_E_N_T structure,
- and is ordered by the userspecified comparison function, if any. Re
- peated calls to ffttss__cchhiillddrreenn() will recreate this linked list.
-
- If the _F_T_S_E_N_T structure most recently returned by ffttss__rreeaadd() is not a di
- rectory being visited in preorder, or the directory does not contain any
- files, ffttss__cchhiillddrreenn() returns NULL and sets _e_r_r_n_o to zero. If an error
- occurs, ffttss__cchhiillddrreenn() returns NULL and sets _e_r_r_n_o appropriately.
-
- The _F_T_S_E_N_T structures returned by ffttss__cchhiillddrreenn() may be overwritten after
- a call to ffttss__cclloossee() on the same file hierarchy stream, or after a call
- to ffttss__cchhiillddrreenn() or ffttss__rreeaadd() on the same file hierarchy stream.
-
- A single buffer is used for all of the paths of all of the files in the
- file hierarchy. Therefore, the _f_t_s___p_a_t_h and _f_t_s___a_c_c_p_a_t_h fields are guar
- anteed to be NULLterminated _o_n_l_y for the file most recently returned by
- ffttss__rreeaadd(). To use these fields to reference any files represented by
- other _F_T_S_E_N_T structures will require that the path buffer be modified us
- ing the information contained in that _F_T_S_E_N_T structure's _f_t_s___p_a_t_h_l_e_n
- field. Any such modifications should be undone before further calls to
- ffttss__rreeaadd() are attempted. The _f_t_s___n_a_m_e field is always NULLterminated.
-
- FFTTSS__SSEETT
- The function ffttss__sseett() allows the user application to determine further
- processing for the file _f of the stream _f_t_s_p. The ffttss__sseett() function re
- turns 0 on success, and -1 if an error occurs. _O_p_t_i_o_n must be set to one
- of the following values:
-
- FTS_AGAIN Revisit the file; any file type may be revisited. The
- next call to ffttss__rreeaadd() will return the referenced file.
- The _f_t_s___s_t_a_t and _f_t_s___i_n_f_o fields of the structure will be
- reinitialized at that time, but no other fields will have
- been changed. This option is meaningful only for the most
- recently returned file from ffttss__rreeaadd(). Normal use is for
- postorder directory visits, where it causes the directory
- to be revisited (in both pre and postorder) as well as
- all of its descendants.
-
- FTS_FOLLOW The referenced file must be a symbolic link. If the refer
- enced file is the one most recently returned by ffttss__rreeaadd(),
- the next call to ffttss__rreeaadd() 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 ffttss__cchhiillddrreenn(), the _f_t_s___i_n_f_o and _f_t_s___s_t_a_t_b fields of the
- structure, when returned by ffttss__rreeaadd(), will reflect the
- target of the symbolic link instead of the symbolic link
- itself. In either case, if the target of the symbolic link
- does not exist the fields of the returned structure will be
- unchanged and the _f_t_s___i_n_f_o field will be set to FTS_SLNONE.
-
- If the target of the link is a directory, the preorder re
- turn, followed by the return of all of its descendants,
- followed by a postorder return, is done.
-
- FTS_SKIP No descendants of this file are visited. The file may be
- one of those most recently returned by either
- ffttss__cchhiillddrreenn() or ffttss__rreeaadd().
-
- FFTTSS__CCLLOOSSEE
- The ffttss__cclloossee() function closes a file hierarchy stream _f_t_s_p and restores
- the current directory to the directory from which ffttss__ooppeenn() was called
- to open _f_t_s_p. The ffttss__cclloossee() function returns 0 on success, and -1 if an
- error occurs.
-
- EERRRROORRSS
- The function ffttss__ooppeenn() may fail and set errno for any of the errors
- specified for the library functions open(2) and malloc(3).
-
- The function ffttss__cclloossee() may fail and set errno for any of the errors
- specified for the library functions chdir(2) and close(2).
-
- The functions FFttss__rreeaadd() and ffttss__cchhiillddrreenn() may fail and set errno for
- any of the errors specified for the library functions chdir(2),
- malloc(3), opendir(3), readdir(3) and stat(2).
-
- SSEEEE AALLSSOO
- find(1), chdir(2), stat(2), qsort(3)
-
- SSTTAANNDDAARRDDSS
- The ffttss utility is expected to be a superset of the IEEE Std1003.11988
- (``POSIX'') specification.
-
- BSD Experimental July 31, 1991 6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-