GNU/Linux >> Znalost Linux >  >> Linux

Existují nějaká rozhraní C API pro extrahování názvu základního souboru z jeho úplné cesty v Linuxu?

Je tam basename() .

Naplňte jej cestou (ve tvaru char* ) a vrátí vám základní název (to je název požadovaného souboru/adresáře) ve tvaru jiného char* .

EDIT:

Zapomněl jsem vám říct, že verze POSIX basename() upravuje svůj argument. Pokud se tomu chcete vyhnout, můžete použít GNU verzi basename() přidáním tohoto ve vašem zdroji:

#define _GNU_SOURCE
#include <string.h>

Výměnou za tuto verzi basename() vrátí prázdný řetězec, pokud jej nakrmíte, např. /usr/bin/ kvůli koncovému lomítku.


Chcete basename(), které by mělo být přítomno v podstatě na jakémkoli systému POSIX:

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. Používání Disku Google z příkazového řádku systému Linux

  2. Linux – Jaké jsou různé způsoby nastavení oprávnění k souborům atd. na Gnu/linux?

  3. Získání úplného názvu cesty daného adresáře?

  1. Jak vytvořit soubor v Linuxu z okna terminálu?

  2. Jak získat cestu k aktuálnímu souboru (pwd) v Linuxu z C?

  3. Nastavte výzvu terminálu v Ubuntu tak, aby zobrazovala pouze název pracovního adresáře namísto jeho úplné cesty

  1. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  2. Linux – Proč v systému není přítomen žádný souborový systém Rootfs?

  3. Jak extrahovat název souboru bez přípony z úplné cesty?