DIRNAME(3)

NOME
dirname, basename - Analisa componentes do nome do caminho

SINÓPSE
#include <libgen.h>

char *dirname(char *path);
char *basename(char *path);

DESCRIÇÃO
dirname e basename quebram uma seqüência de um nome de caminho terminada em NULO em componentes 'diretório' e 'nome de arquivo'. Na forma comum, dirname retorna a seqüência até a '/' (exclusive), e basename retorna o componente após a '/' final. Caracteres '/' subseqüentes não são contados como parte do nome do caminho.

Se path não contiver uma barra, dirname retorna a seqüência ".", enquanto que basename retorna uma cópia de path. Se path for a seqüência "/", então tanto dirname como basename retornarão a seqüência "/". Se path for um ponteiro 'NULO' ou apontar para uma seqüência vazia, então tanto dirname como basename retornarão a seqüência ".".

A concatenação de uma seqüência retornada por dirname, uma '/', e a seqüência retornada por basename forma um nome de caminho completo.

Tanto dirname como basename podem modificar o conteúdo de path, então, caso você tenha que preservar a seqüência do nome de caminho, deve-se passar cópias a essas funções. Além disso, dirname e basename podem retornar ponteiros a memória alocada estaticamente, a qual pode ser sobrescrita por chamadas subseqüentes.

A lista de exemplos a seguir (obtida do SUSv2) mostra as seqüências retornadas por dirname e basename para diferentes caminhos:

caminho		dirname		basename
"/usr/lib"	"/usr"		"lib"
"/usr/"		"/"  		"usr"
"usr"		"."  		"usr"
"/"  		"/"  		"/"
"."  		"."  		"."
".."  		"."  		".."

EXEMPLO
char *dirc, *basec, *bname, *dname;
char *path = "/etc/passwd";
dirc = strdup(path);
basec = strdup(path);
dname = dirname(dirc);
bname = basename(basec);
printf("dirname=%s, basename=%s\n", dname, bname);
free(dirc);
free(basec);

VALORES RETORNADOS
Tanto dirname como basename retornam ponteiros a seqüencia terminadas em NULO.

PROBLEMAS
Em versões da glibc a partir da 2.2.1 (inclusive), dirname não trata corretamente nomes de caminhos com caracteres '/' subseqüentes, e gera uma violação de segmentação caso um argumento NULO seja fornecido.

DE ACORDO COM
SUSv2.

VEJA TAMBÉM
dirname(1), basename(1).

TRADUZIDO POR LDP-BR em 05/06/2001.

  Tradução:
E. A. Tacão <tacao@conectiva.com.br>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>