.\" Copyright (c) 1993 Michael Haardt (michael@moria.de) .\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl) .\" Fri Jun 25 00:34:07 CEST 1999 .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" .\" Modified Sun Jul 25 11:02:22 1993 by Rik Faith (faith@cs.unc.edu) .TH FTW 3 "25 de junho de 1999" "Linux" "Manual do Programador Linux" .SH NOME ftw, nftw \- caminha pela árvore de arquivos .SH SINOPSE .B #include .sp .BI "int ftw (const char *" dir ", int (*" fn ")(const" .BI "char *" file ", const struct stat *" sb ", int " flag ), .BI "int " depth ); .sp .BI "int nftw (const char *" dir ", int (*" fn ")(const" .BI "char *" file ", const struct stat *" sb ", int " flag , .BI "struct FTW *" s ), .BI "int " depth ", int " flags ); .SH DESCRIÇÃO \fBftw\fP() caminha através da árvore de diretório, começando do diretório \fIdir\fP indicado. Para cada entrada encontrada na árvore, ela chama \fIfn\fP() com o caminho de diretório completo da entrada, um ponteiro para a estrutura .BR stat (2) da entrada, e um int, cujo valor será um dos seguintes: .TP .B FTW_F O item é um arquivo normal .TP .B FTW_D O item é um diretório .TP .B FTW_DNR O item é um diretório que não pode ser lido .TP .B FTW_SL O item é uma ligação simbólica .TP .B FTW_NS 'stat' falhou no item que não é uma ligação simbólica .LP Se o item é uma ligação simbólica e 'stat' falhou, XPG4v2 afirma que ele é indefinido se FTW_NS ou FTW_SL é usado. .PP \fBftw\fP() 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 \fIdepth\fP especifica o número de diretórios abertos simultaneamente. Quando a profundidade é excedida, \fBftw\fP() se tornará mais lenta porque os diretórios têm que ser fechados e reabertos. \fBftw\fP() usa no máximo um descritor de arquivos para cada nível na hierarquia de arquivos. .PP Para parar a caminhada na árvore, \fIfn\fP() retorna um valor diferente de zero; este valor se tornará o valor de retorno de \fBftw\fP(). Caso contrário, \fBftw\fP() 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 .BR malloc (3) ), em cujo caso retornará \-1. .PP Como \fBftw()\fP 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 \(emnão use .BR longjmp (3) a menos que o programa vá terminar. A função \fBnftw\fP() faz precisamente a mesma coisa que \fBftw\fP(), exceto pelo fato de que ela tem um argumento adicional, \fIflags\fP (e chama a função fornecida com mais um argumento). Este argumento \fIflags\fP é uma operação OU de zero ou mais das seguintes flags: .TP .B FTW_CHDIR Se setado, faz um .IR chdir () para cada diretório antes de manipular seu conteúdo. .TP .B 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. .TP .B FTW_MOUNT Se setado, fica dentro do mesmo sistema de arquivos. .TP .B 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. .LP Se FTW_PHYS não é setado, mas FTW_DEPTH é setado, então a função .IR fn () nunca é chamada para um diretório que seria um descendente dele mesmo. .LP A função .IR 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 .TP .B FTW_DP O item é um diretório e todos os seus descendentes já foram manipulados. (Isto ocorre somente com FTW_DEPTH setado.) .TP .B 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.) .LP A estrutura FTW apontada pelo quarto argumento para .IR fn () tem pelo menos os campos .IR base , o offset do nome de arquivo do item no caminho de diretório dado como primeiro argumento de .IR fn (), e .IR level , a profundidade do item em relação ao ponto inicial (que tem profundidade 0). .SH NOTAS A função .IR nftw () e o uso de FTW_SL com .IR 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 .IR nftw (). .SH "CONFORME" AES, SVID2, SVID3, XPG2, XPG3, XPG4, XPG4v2. .SH "VEJA TAMBÉM" .BR stat (2) .SH TRADUÇÃO PARA A LÍNGUA PORTUGUESA \&\fR\&\f(CWRUBENS DE JESUS NOGUEIRA (tradução)\fR \&\fR\&\f(CWXXXXXX XX XXXXX XXXXXXXX (revisão)\fR