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

NOME

       ftw, nftw - caminha pela árvore de arquivos

SINOPSE

       #include <ftw.h>

       int  ftw  (const  char *dir, int (*fn)(const char *file, const struct stat *sb, int flag),
       int depth);

       int nftw (const char *dir, int (*fn)(const char *file, const struct stat  *sb,  int  flag,
       struct FTW *s), int depth, int flags);

DESCRIÇÃO

       ftw()  caminha  através  da árvore de diretório, começando do diretório dir indicado. Para
       cada entrada encontrada na árvore, ela chama fn() com o caminho de diretório  completo  da
       entrada, um ponteiro para a estrutura stat(2) da entrada, e um int, cujo valor será um dos
       seguintes:

       FTW_F  O item é um arquivo normal

       FTW_D  O item é um diretório

       FTW_DNR
              O item é um diretório que não pode ser lido

       FTW_SL O item é uma ligação simbólica

       FTW_NS

       Se o item é uma ligação simbólica e 'stat' falhou, XPG4v2 afirma que ele é  indefinido  se
       FTW_NS ou FTW_SL é usado.

       ftw()  chama recursivamente a si mesmo para atravessar diretórios encontrados, manipulando
       um diretório antes do seus arquivos ou subdiretórios.  Para  evitar  o  uso  de  todos  os
       descritores  de  arquivos  do  programa, o depth especifica o número de diretórios abertos
       simultaneamente.  Quando a profundidade é excedida, ftw() se tornará mais lenta porque  os
       diretórios  têm que ser fechados e reabertos. ftw() usa no máximo um descritor de arquivos
       para cada nível na hierarquia de arquivos.

       Para parar a caminhada na árvore, fn() retorna um valor diferente de zero; este  valor  se
       tornará  o  valor  de  retorno  de  ftw().  Caso contrário, ftw() continuará até que tenha
       atravessado a árvore inteira, em cujo caso retornará zero, ou até que ele encontre um erro
       diferente de EACCES (tal como uma falha de malloc(3) ), em cujo caso retornará -1.

       Como  ftw()  usa  estruturas  de  dados  dinâmicas,  a única maneira segura de sair de uma
       caminhada na árvore é retornar um valor diferente de zero.  Para  manipular  interrupções,
       por  exemplo,  indica  que a interrupção ocorreu e retorna um valor diferente de zero —não
       use longjmp(3) a menos que o programa vá terminar.

       A função nftw() faz precisamente a mesma coisa que ftw(), exceto pelo fato de que ela  tem
       um  argumento  adicional,  flags (e chama a função fornecida com mais um argumento).  Este
       argumento flags é uma operação OU de zero ou mais das seguintes flags:

       FTW_CHDIR
              Se setado, faz um chdir() para cada diretório antes de manipular seu conteúdo.

       FTW_DEPTH
              Se setado, faz uma busca primeiro por profundidade, ou seja, chama a função para  o
              próprio  diretório  somente  depois  de  manipular os conteúdos do diretório e seus
              subdiretórios.

       FTW_MOUNT
              Se setado, fica dentro do mesmo sistema de arquivos.

       FTW_PHYS
              Se setado, não segue ligações simbólicas.  (Isto  é  o  que  você  quer.)   Se  não
              setado,  as  ligações  simbólicas  são seguidas, mas nenhum arquivo é relatado duas
              vezes.

       Se FTW_PHYS não é setado, mas FTW_DEPTH é setado, então a função fn() nunca é chamada para
       um diretório que seria um descendente dele mesmo.

       A função fn() é chamada com quatro argumentos: o caminho de diretório da entrada relatada,
       um ponteiro para uma estrutura 'stat' desta entrada, um inteiro descrevendo seu tipo, e um
       ponteiro  para  uma  estrutura  FTW.  O tipo será um dos seguintes: FTW_F, FTW_D, FTW_DNR,
       FTW_SL, FTW_NS ( com o significado acima; FTW_SL ocorre somente com FTW_PHYS setado) ou

       FTW_DP O item é um diretório e todos os seus  descendentes  já  foram  manipulados.  (Isto
              ocorre somente com FTW_DEPTH setado.)

       FTW_SLN
              O  item  é  uma  ligação  simbólica apontando para um arquivo não existente.  (Isto
              ocorre somente com FTW_PHYS não setado.)

       A estrutura FTW apontada pelo quarto argumento para fn() tem pelo menos os campos base,  o
       offset  do nome de arquivo do item no caminho de diretório dado como primeiro argumento de
       fn(), e level, a profundidade do item em relação ao ponto inicial  (que  tem  profundidade
       0).

NOTAS

       A  função  nftw()  e  o  uso de FTW_SL com ftw() foram introduzidos em XPG4v2.  Sob Linux,
       libc4, libc5 e glibc  2.0.6  usarão  FTW_F  para  todos  os  objetos  (arquivos,  ligações
       simbólicas,  fifos,  etc)  que  podem  ser  receber  um  'stat' mas não são diretórios.  A
       primeira glibc 2.1 suporta FTW_SL e nftw().

CONFORME

       AES, SVID2, SVID3, XPG2, XPG3, XPG4, XPG4v2.

VEJA TAMBÉM

       stat(2)

TRADUÇÃO PARA A LÍNGUA PORTUGUESA

       RUBENS  DE  JESUS  NOGUEIRA  <darkseid99@usa.net>  (tradução)  XXXXXX  XX  XXXXX  XXXXXXXX
       <xxxxxxxxxx@xxx.xxx> (revisão)