GNU/Linux >> Linux Esercitazione >  >> Linux

Esistono API C per estrarre il nome del file di base dal suo percorso completo in Linux?

C'è basename() .

Alimentalo con un percorso (sotto forma di char* ) e ti restituirà il nome di base (ovvero il nome del file/directory che desideri) sotto forma di un altro char* .

MODIFICA:

Ho dimenticato di dirti che la versione POSIX di basename() modifica il suo argomento. Se vuoi evitare questo puoi usare la versione GNU di basename() anteponendo questo nella tua fonte:

#define _GNU_SOURCE
#include <string.h>

In cambio questa versione di basename() restituirà una stringa vuota se la alimenti con, ad es. /usr/bin/ a causa della barra finale.


Vuoi basename(), che dovrebbe essere presente praticamente su qualsiasi 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);
}

Linux
  1. 4 strumenti per scaricare qualsiasi file utilizzando la riga di comando in Linux

  2. Esistono codici di stato di uscita standard in Linux?

  3. Estrai il nome base del file senza percorso ed estensione in bash

  4. Come trovare il percorso completo del programma C++ Linux dall'interno?

  5. Nome del processo dal suo pid in Linux

Come estrarre il file tar.gz in Linux utilizzando la riga di comando

Come estrarre indirizzi e-mail da file di testo in Linux

Come ottenere il nome del file dal percorso completo in Linux

Come ottenere il percorso del file corrente (pwd) in Linux da C?

Imposta il prompt del terminale in Ubuntu per mostrare solo il nome della directory di lavoro invece del suo percorso completo

Come estrarre il nome del file senza l'estensione da un percorso completo?