Hay nombre base() .
Aliméntalo con una ruta (en forma de char*
) y le devolverá el nombre base (que es el nombre del archivo/directorio que desea) en forma de otro char*
.
EDITAR:
Olvidé decirte que la versión POSIX de basename()
modifica su argumento. Si quieres evitar esto, puedes usar la versión GNU de basename()
anteponiendo esto en su fuente:
#define _GNU_SOURCE
#include <string.h>
A cambio de esta versión de basename()
devolverá una cadena vacía si la alimenta, p. /usr/bin/
debido a la barra diagonal final.
Desea basename(), que debería estar presente en prácticamente cualquier sistema POSIX-ish:
http://www.opengroup.org/onlinepubs/000095399/functions/basename.html
#include <stdio.h>
#include <libgen.h>
int main() {
char name[] = "/foo/bar.txt";
printf("%s\n", basename(name));
return 0;
}
...
$ gcc test.c
$ ./a.out
bar.txt
$
#include <string.h>
char *basename(char const *path)
{
char *s = strrchr(path, '/');
if (!s)
return strdup(path);
else
return strdup(s + 1);
}