Provided by: manpages-es_1.55-10_all 

NOMBRE
dirname, basename - Analiza los componentes de un nombre de ruta
SINOPSIS
#include <libgen.h>
char *dirname(char *path);
char *basename(char *path);
DESCRIPCIÓN
Las funciones dirname y basename descomponen un nombre de ruta terminado en null en un directorio y un
nombre de fichero. En el caso habitual, dirname devuelve la cadena que precede, pero no incluye, al
último carácter '/', y basename devuelve el componente que sigue al último carácter '/'. Los carácteres
'/' del final no se cuentan como parte del nombre de ruta.
Si path no contiene una barra, dirname devuelve la cadena "." mientras que basename devuelve una copia de
path. Si path es la cadena "/", entonces tanto dirname como basename devuelven la cadena "/". Si path
es un puntero a NULL o apunta a una cadena vacía, entonces tanto dirname como basename devuelven la
cadena ".".
Concatenando la cadena devuelta por dirname, un carácter "/", y la cadena devuelta por basename se
obtiene el nombre de ruta completo.
Tanto dirname como basename pueden modificar el contenido de path, así que si necesita preservar la
cadena pathname, debería pasar una copia de ella a estas funciones. Además, dirname y basename pueden
devolver punteros a memoria estática que puede ser sobreescrita en llamadas posteriores.
La siguiente lista de ejemplos (extraídos de SUSv2) muestra las cadenas devueltas por dirname y basename
para diferentes rutas:
ruta dirname basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr"
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."
EJEMPLO
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);
VALOR DEVUELTO
Tanto dirname como basename devuelven punteros a cadenas terminadas en null.
FALLOS
En versiones de glibc anteriores a 2.2.1 (incluída), dirname no maneja correctamente los nombres de ruta
con carácteres '/' al final, y provoca una violación de segmento si se le pasa un argumento NULL.
CONFORME A
SUSv2
VÉASE TAMBIÉN
dirname(1), basename(1),
GNU 14 diciembre 2000 DIRNAME(3)