Provided by: manpages-pt-dev_20040726-5_all bug

NOME

       fts, fts_open, fts_read, fts_children, fts_set, fts_close — atravessa uma hierarquia de arquivos

SINOPSE

       #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 options) int fts_set(FTS *ftsp,  FTSENT
       *f, int options) int fts_close(FTS *ftsp)

DESCRIÇÃO

       As funções fts são fornecidas para a travessia de hierarquias de arquivos UNIX. Uma visão geral simples é
       que  a  função  fts_open() retorna um ''manipulador'' em uma hierarquia de arquivo, que é então fornecida
       para as outras funções fts. A função fts_read() retorna um ponteiro para uma estrutura  que  descreve  um
       dos  arquivos  na  hierarquia  de  arquivos.   A função fts_children() retorna um ponteiro para uma lista
       ligada de estruturas, cada uma das quais descreve um dos arquivos contidos em um diretório na hierarquia.
       Em geral, diretórios são visitados em dois momentos distinguíveis: em pré-ordem (antes  que  qualquer  um
       dos  seus  descendentes  sejam  visitados)  e  em  pós-ordem (depois que todos os seus descendentes foram
       visitados).  Arquivos são visitados  uma  vez.   É  possível  caminhar  pela  hierarquia  ''logicamente''
       (ignorando  ligações  simbólicas)  ou  fisicamente  (visitando ligações simbólicas), ordenar o caminho da
       hierarquia ou podar e/ou re-visitar porções da hierarquia.

       Duas estruturas são definidas (inclusive via 'typedef') no arquivo de inclusão  ⟨fts.h⟩.   A  primeira  é
       FTS,  a  estrutura  que  representa  a própria hierarquia de arquivo. A segunda é FTSENT, a estrutura que
       representa um arquivo em uma hierarquia de arquivos.  Normalmente, uma estrutura FTSENT é retornada  para
       qualquer  arquivo  na  hierarquia.   Nesta página de manual, ''file'' e “FTSENT structure” geralmente são
       intercambiáveis.  A estrutura FTSENT contém pelo menos os seguintes campos, que são descritos em  maiores
       detalhes abaixo:

       typedef struct _ftsent {
               u_short fts_info;               /* flags para a estrutura FTSENT */
               char *fts_accpath;              /* caminho de acesso */
               char *fts_path;                 /* caminho raiz */
               short fts_pathlen;              /* strlen(fts_path) */
               char *fts_name;                 /* nome do arquivo */
               short fts_namelen;              /* strlen(fts_name) */
               short fts_level;                /* profundidade (-1 a N) */
               int fts_errno;                  /* errno do arquivo */
               long fts_number;                /* valor numérico local */
               void *fts_pointer;              /* valor do endereço local */
               struct ftsent *fts_parent;      /* diretório pai */
               struct ftsent *fts_link;        /* estrutura do próximo arquivo */
               struct ftsent *fts_cycle;       /* estrutura de ciclo */
               struct stat *fts_statp;         /* informação de stat(2) */
       } FTSENT;

       Estes campos são definidos como segue:

       fts_info     Uma  das  seguintes  flags  que  descrevem a estrutura FTSENT retornada, e o arquivo que ela
                    representa.  Com exceção  dos  diretórios  sem  erros  (FTS_D),  todas  estas  entradas  são
                    terminais,  ou  seja,  elas não serão re-visitadas, nem qualquer dos seus descendentes serão
                    visitados.

                    FTS_D        Um diretório sendo visitado em pré-ordem.

                    FTS_DC       Um diretório que causa um ciclo na árvore.  (O  campo  fts_cycle  da  estrutura
                                 FTSENT será preenchida também.)

                    FTS_DEFAULT  Qualquer  estrutura  FTSENT  que  representa  um  tipo  de arquivo não descrito
                                 explicitamente por um dos outros valores fts_info.

                    FTS_DNR      Um diretório que não pode ser lido. Este é  um  retorno  de  erro,  e  o  campo
                                 fts_errno será setado para indicar o que causou o erro.

                    FTS_DOT      Um  arquivo  denominado  ‘.’  ou  ‘..’ que não foi especificado como um nome de
                                 arquivo para fts_open() (veja FTS_SEEDOT).

                    FTS_DP       Um diretório sendo visitado em pós-ordem.  Os  conteúdos  da  estrutura  FTSENT
                                 serão  imutáveis a partir de quando ele foi retornado em pré-ordem, isto é, com
                                 o campo fts_info setado em FTS_D.

                    FTS_ERR      Este é um retorno de erro, e o campo fts_errno será setado para indicar  o  que
                                 causou o erro.

                    FTS_F        Um arquivo regular.

                    FTS_NS       Um  arquivo  para  o  qual  nenhuma  informação  stat(2)  estava disponível.  O
                                 conteúdo do campo fts_statp é indefinido.  Este é um retorno de erro, e o campo
                                 fts_errno será setado para indicar o que causou o erro.

                    FTS_NSOK     Um arquivo para o qual nenhuma informação stat(2) foi requisitada.  O  conteúdo
                                 do campo fts_statp é indefinido.

                    FTS_SL       Uma ligação simbólica.

                    FTS_SLNONE   Uma ligação simbólica com um alvo não-existente.  O conteúdo do campo fts_statp
                                 referencia  a  informação  característica  do  arquivo  para  a própria ligação
                                 simbólica.

       fts_accpath  Um caminho para acessar o arquivo a partir do diretório corrente.

       fts_path     O caminho para o arquivo em relação à raiz da travessia.  Este caminho é aquele especificado
                    para fts_open() como um prefixo.

       fts_pathlen  O comprimento da string referenciada por fts_path.

       fts_name     O nome do arquivo.

       fts_namelen  O comprimento da string referenciada por fts_name.

       fts_level    A profundidade da travessia, numerado de -1 a  N,  onde  este  arquivo  foi  encontrado.   A
                    estrutura FTSENT que representa o pai do ponto inicial (ou raiz) da travessia é numerada com
                    -1, e a estrutura FTSENT para a própria raiz é numerada com 0.

       fts_errno    Ao  retornar  de  uma  estrutura  FTSENT das funções fts_children() ou fts_read() , com seus
                    campos fts_info setados para FTS_DNR, FTS_ERR ou FTS_NS, o campo fts_errno contém o valor da
                    variável externa errno especificando a causa do erro. Caso contrário, o  conteúdo  do  campo
                    fts_errno é indefinido.

       fts_number   Este  campo é fornecido para o uso do programa de aplicação e não é modificado pelas funções
                    fts. É inicializado com 0.

       fts_pointer  Este campo é fornecido para o uso de programas aplicativos e não é modificado pelas  funções
                    fts. Ele é inicializado com NULL.

       fts_parent   Um  ponteiro  para uma estrutura FTSENT que referencia o arquivo na hierarquia imediatamente
                    acima do arquivo corrente, isto  é,  o  diretório  do  qual  este  arquivo  é  membro.   Uma
                    estrutura-pai  para  o  ponto de entrada inicial também é fornecido, porém somente os campos
                    fts_level, fts_number e fts_pointer são garantidamente inicializados.

       fts_link     Ao retornar da função fts_children() , o campo fts_link aponta para a próxima  estrutura  na
                    lista ligada terminada em NULL dos membros do diretório. Caso contrário, o conteúdo do campo
                    fts_link é indefinido.

       fts_cycle    Se  um diretório produz um ciclo na hierarquia (veja FTS_DC) por causa de uma ligação sólida
                    entre dois diretórios ou por causa de uma ligação simbólica apontando para um  diretório,  o
                    campo fts_cycle da estrutura apontará para a estrutura FTSENT na hierarquia que referencia o
                    mesmo arquivo que a estrutura FTSENT corrente. Caso contrário, o conteúdo do campo fts_cycle
                    é indefinido.

       fts_statp    Um ponteiro para informações stat(2) para o arquivo.

       Um  buffer  simples  é  usado  para  todos  os  caminhos  de todos os arquivos na hierarquia de arquivos.
       Portanto, os campos fts_path e fts_accpath  são  garantidamente  terminados  em  NULLsomente  no  arquivo
       retornado  mais  recentemente  por  fts_read().  Para usar estes campos para referenciar qualquer arquivo
       representado por outras estruturas FTSENT, será necessário que o buffer de caminho seja modificado usando
       informações contidas no campo  information  contained  in  that  fts_pathlen  daquela  estrutura  FTSENT.
       Quaisquer  modificações  deste  tipo devem ser desfeitas antes que chamadas adicionais a fts_read() sejam
       tentadas.  O campo fts_name é sempre terminado em NULL Ns.

FTS_OPEN

       A função fts_open() pega um ponteiro para uma matriz de ponteiros de caracteres, que nomeia  um  ou  mais
       caminhos criando uma hierarquia lógica de arquivos a ser atravessada.  A matriz precisa ser terminada com
       um ponteiro NULL.

       Há  um  grande  número  de  opções,  pelo  menos uma das quais ( FTS_LOGICAL ou FTS_PHYSICAL) precisa ser
       especificada.  As opções são selecionadas ou estão selecionando pelos seguintes valores:

       FTS_COMFOLLOW
                     Esta opção faz com que qualquer ligação simbólica especificada como um  caminho  raiz  seja
                     seguido imediatamente, ou não, se FTS_LOGICAL é especificado também.

       FTS_LOGICAL   Esta opção faz com que as rotinas fts retornem estruturas FTSENT para os alvos das ligações
                     simbólicas,  em  vez  das  próprias  ligações.   Se esta opção é setada, as únicas ligações
                     simbólicas para que as estruturas FTSENT sejam retornadas para a aplicação são aquelas  que
                     referenciam  arquivos  não  existentes.  Tanto FTS_LOGICAL quanto FTS_PHYSICAL precisam ser
                     fornecidos para a função fts_open.()

       FTS_NOCHDIR   Como uma otimização de performance, as funções fts mudam diretórios conforme eles  caminham
                     na  hierarquia  de  arquivos.   Isto  tem um efeito colateral de que um aplicativo não pode
                     confiar em ser um diretório particular qualquer durante a travessia.  A  opção  FTS_NOCHDIR
                     desativa  esta  otimização, e as funções fts não mudarão o diretório corrente.  Note que os
                     aplicativos não devem, por eles  próprios,  alterar  seus  diretórios  correntes  e  tentar
                     acessar  arquivos  a  menos  que  FTS_NOCHDIR  seja  especificado e os caminhos de arquivos
                     absolutos foram fornecidos como argumentos para fts_open().

       FTS_NOSTAT    Por padrão, estruturas FTSENT retornadas referenciam informações características de arquivo
                     ( o campo statp ) para cadas arquivo visitado.  Esta opção relaxa aqueles  requisitos  como
                     uma  otimização  de  performance, permitindo que as funções fts setem o campo fts_info para
                     FTS_NSOK e deixem o conteúdo do campo statp indefinido.

       FTS_PHYSICAL  Esta rotina faz com que as rotinas fts retornem estruturas FTSENT para as próprias ligações
                     simbólicas, em vez dos arquivos-alvo para os quais eles apontam.  Se esta opção  é  setada,
                     as  estruturas FTSENT para todas as ligações simbólicas na hierarquia são retornadas para o
                     aplicativo.  FTS_LOGICAL ou FTS_PHYSICAL deve ser fornecido para a função fts_open.()

       FTS_SEEDOT    Por padrão, a menos que sejam especificados como argumentos  de  caminho  para  fts_open(),
                     quaisquer  arquivos  com  nome  ‘.’  ou  ‘..’  encontrados  na  hierarquia  de arquivos são
                     ignorados.  Esta opção faz com que as rotinas fts retornem FTSENT para eles.

       FTS_XDEV      Esta opção evita que fts  desça  para  diretórios  que  tenham  um  número  de  dispositivo
                     diferente do arquivo da qual o descendente começa.

       O  argumento  compar()  especifica  uma  função  definida  pelo usuário que pode ser usada para ordenar a
       travessia da hierarquia.  Ele pega dois ponteiros de ponteiros para estruturas FTSENT como a argumentos e
       deve retornar um valor negativo, zero ou um valor positivo para indicar se o  arquivo  referenciado  pelo
       seu  primeiro  argumento vem antes, em qualquer ordem, ou depois do arquivo referenciado pelo seu segundo
       argumento.  Os campos fts_accpath, fts_path e fts_pathlen das estruturas FTSENT nunca  podem  ser  usados
       nesta  comparação.   Se o campo fts_info é setado para FTS_NS ou FTS_NSOK, o campo fts_statp não pode ser
       usado.  Se o argumento compar() é NULL, a ordem de travessia  do  diretório  está  na  ordem  listada  em
       path_argv para os caminhos da raiz, e na ordem listada no diretório para todos os demais.

FTS_READ

       A  função  fts_read() retorna um ponteiro para uma estrutura FTSENT descrevendo um arquivo na hierarquia.
       Diretórios (que são legíveis e não causam ciclos) são visitados  pelos  menos  duas  vezes,  uma  vez  em
       pré-ordem  e uma vez em pós-ordem.  Todos os outros arquivos são visitados pelo menos uma vez.  (Ligações
       fixas entre diretórios que não provocam ciclos, ou ligações simbólicas  para  ligações  simbólicas  podem
       fazer  com  que  arquivos  sejam  visitados  mais  de uma vez, ou diretórios sejam visitados mais de duas
       vezes.)

       Se todos os membros da hierarquia foram retornados, fts_read() retorna NULL e  seta  a  variável  externa
       errno  para  0.   Se ocorre um erro não relacionado a um arquivo na hierarquia, fts_read() retorna NULL e
       seta errno adequadamente.  Se ocorre um erro relacionado a um arquivo retornado, é retornado um  ponteiro
       para uma estrutura FTSENT , e errno pode ou não ter sido setado (veja fts_info).

       As  estruturas  FTSENT  retornadas  por  fts_read()  podem  ser  sobreescritas  depois  de  uma chamada a
       fts_close() no mesmo fluxo de hierarquia de arquivo, ou, depois de uma  chamada  a  fts_read()  no  mesmo
       fluxo  de  hierarquia de arquivo, a menos que eles representem um arquivo do tipo diretório, em cujo caso
       eles não serão sobreescritos até que seja feita uma chamada a fts_read() depois que uma estrutura  FTSENT
       tenha sido retornada pela função fts_read() em pós-ordem.

FTS_CHILDREN

       A  função  fts_children() retorna um ponteiro para uma estrutura FTSENT descrevendo a primeira entrada em
       uma lista ligada, terminada em NULL, dos arquivos no diretório representado pela  estrutura  FTSENT  mais
       recentemente  retornada por fts_read().  A lista é ligada através do campo fts_link da estrutura FTSENT ,
       e é ordenada pela função de comparação especificada  pelo  usuário,  se  houver.   Chamadas  repetidas  a
       fts_children() recriará esta lista ligada.

       Como  um caso especial, se fts_read() ainda não foi chamado para uma hierarquia, fts_children() retornará
       um ponteiro para os arquivos no diretório lógico especificado para  fts_open(),  isto  é,  os  argumentos
       especificados  para  fts_open().   Caso  contrário, se a estrutura FTSENT retornada mais recentemente por
       fts_read() não é um diretório sendo visitado em pré-ordem, ou o  diretório  não  contém  nenhum  arquivo,
       fts_children()  retorna  NULL  e  seta errno para zero.  Se ocorre um erro, fts_children() retorna NULL e
       seta errno adequadamente.

       As estruturas FTSENT retornadas por fts_children() podem  ser  sobreescritas  depois  de  uma  chamada  a
       fts_children(), fts_close() ou fts_read() no mesmo fluxo de hierarquia de arquivos.

       Option pode ser setado para os seguintes valores:

       FTS_NAMEONLY  Somente  os  nomes  dos arquivos são necessários.  Os conteúdos de todos os campos na lista
                     ligada  de  estruturas  retornada  são  indefinidas  com  exceção  dos  campos  fts_name  e
                     fts_namelen.

FTS_SET

       A função fts_set() permite que a aplicação do usuário determine um processamento adicional para o arquivo
       f  do  fluxo  ftsp.   A  função  fts_set()  retorna 0 em caso de sucesso, e -1 se ocorre um erro.  Option
       precisa ser setado para um dos seguintes valores:

       FTS_AGAIN     Revisita o arquivo; qualquer tipo de arquivo pode ser  revisitado.   A  próxima  chamada  a
                     fts_read()  retornará  o  arquivo referenciado.  Os campos fts_stat e fts_info da estrutura
                     serão reiniciados naquele momento, mas nenhum outro campo  será  alterado.   Esta  opção  é
                     significativa somente para o arquivo mais recentemente retornado de fts_read().  Uso normal
                     é  para  visitas  a  diretórios  em pós-ordem, onde faz com que o diretório seja revisitado
                     (tanto em pré-ordem quanto em pós-ordem) junto com todos os seus descendentes.

       FTS_FOLLOW    O arquivo referenciado precisa ser uma ligação simbólica.  Se o arquivo  referenciado  é  o
                     mais  recentemente  retornado  por  fts_read(),  a  próxima  chamada a fts_read() retorna o
                     arquivo com os campos fts_info  e  fts_statp  reinicializados  para  refletir  o  alvo  das
                     ligações  simbólicas  em vez da própria ligação simbólica.  Se o arquivo é um daqueles mais
                     recentemente retornados por fts_children(), os campos fts_info e  fts_statp  da  estrutura,
                     quando  retornados por fts_read(), refletirão o alvo da ligação simbólica em vez da própria
                     ligação simbólica.  Neste caso, se o alvo da ligação simbólica não  existe,  os  campos  da
                     estrutura retornada não serão alterados e o campo fts_info será setado para FTS_SLNONE.

                     Se  o alvo da ligação é um diretório, é feito um retorno de pré-ordem, seguido pelo retorno
                     de todos os seus descendentes, seguido por um retorno de pós-ordem.

       FTS_SKIP      Nenhum descendente deste  arquivo  é  visitado.   O  arquivo  pode  ser  um  daqueles  mais
                     recentemente retornados por fts_children() ou fts_read().

FTS_CLOSE

       A  função fts_close() fecha um fluxo de hierarquia de arquivo ftsp e recupera o diretório corrente para o
       diretório do qual fts_open() foi chamado para abrir ftsp.  A função fts_close()  retorna  0  em  caso  de
       sucesso, e -1 se ocorre um erro.

ERROS

       A função fts_open() pode falhar e setar errno para qualquer um dos erros especificados para as funções de
       biblioteca open(2) e malloc(3).

       A  função  fts_close() pode falhar e setar errno para qualquer um dos erros especificados para as funções
       de biblioteca chdir(2) e close(2).

       As funções  fts_read()  e  fts_children()  podem  falhar  e  setar  errno  para  qualquer  um  dos  erros
       especificados para as funções de biblioteca chdir(2), malloc(3), opendir(3), readdir(3) e stat(2).

       Além disso, fts_children(), fts_open() e fts_set() podem falhar e setar errno como segue:

       [EINVAL]           As opções eram inválidas.

VEJA TAMBÉM

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

PADRÕES

       BSD 4.4. Espera-se que o utilitário fts seja incluído em uma futura revisão de

DISPONIBILIDADE

       Estas   funções   estão  disponíveis  em  Linux  desde  a  glibc2  (libc6).   RUBENS  DE  JESUS  NOGUEIRA
       <darkseid99@usa.net> (tradução) XXXXXX XX XXXXX XXXXXXXX <xxxxxxxxxx@xxx.xxx> (revisão)

Debian                                         16 de abril de 1994                                        FTS(3)