glob(3) findet Pfadnamen, die einem Muster genügen; gibt von glob()

Other Alias

globfree

ÜBERSICHT

#include <glob.h>


int glob(const char *pattern, int flags,
int (*errfunc) (const char *epath, int eerrno),
glob_t *pglob);
void globfree(glob_t *pglob);

BESCHREIBUNG

Die Funktion glob() sucht alle Pfadnamen, die nach den von der Shell verwendeten Regeln dem Muster pattern genügen und gibt sie zurück (siehe auch glob(7)). Tilde-Erweiterungen und Parametersubstitutionen werden nicht durchgeführt.

Die Funktion globfree() gibt den dynamisch allozierten Speicher wieder frei, der noch von einem früheren Aufruf von glob() belegt wird.

Die Ergebnisse eines Aufrufes von glob() werden in der Struktur gespeichert, auf die pglob zeigt. Sie ist vom Typ glob_t (deklariert in <glob.h>) und enthält die folgenden von POSIX.2 definierten Elemente (als Erweiterung können zusätzliche Elemente vorhanden sein):


typedef struct {
    size_t   gl_pathc;  /* Anzahl der bisher gefundenen Dateinamen */
    char   **gl_pathv;  /* Liste passender Pfadnamen */
    size_t   gl_offs;   /* in gl_pathv zu reservierendende "Slots" */
} glob_t;

Die Ergebnisse werden in dynamisch alloziertem Speicher abgelegt.

Das Argument flags besteht aus einer bitweisen ODER-Verknüpfung von null oder mehreren der folgenden symbolischen Konstanten, die das Verhalten von glob() bestimmen:

GLOB_ERR
Funktion bei Lesefehler beenden (weil z. B. für ein Verzeichnis das Lesen nicht gestattet ist). Standardmäßig versucht glob() trotz Fehlern weiterzumachen und alle Verzeichnisse zu lesen, die ihr möglich sind.
GLOB_MARK
An jeden gefundenen Pfad einen Schrägstrich an, wenn dieser einemVerzeichnis entspricht.
GLOB_NOSORT
Die zurückgegebenen Pfadnamen nicht sortieren. Der einzige Grund dafür ist das Einsparen von Zeit für die Verarbeitung. Standardmäßig werden die zurückgegebenen Pfadnamen sortiert.
GLOB_DOOFFS
pglob->gl_offs Einträge am Anfang der String-Liste in pglob->pathv reservieren. Die reservierten Einträge enthalten Null-Zeiger.
GLOB_NOCHECK
Falls kein Muster passt, das ursprüngliche Muster zurückgeben. Standardmäßig gibt glob() GLOB_NOMATCH zurück, wenn es keine Fundstellen gibt.
GLOB_APPEND
Die Ergebnisse dieses Aufrufs an den Ergebnisvektor eines früheren Aufrufs von glob() anhängen. Setzen Sie dieses Flag nicht beim ersten Aufruf von glob().
GLOB_NOESCAPE
Den linksseitigen Schrägstrich (»\«) nicht als Escape-Zeichen zulassen. Normalerweise wird dieses Zeichen verwendet um die folgenden Zeichen zu maskieren und somit einen Mechanismus zum Ausschalten der besonderen Bedeutung von Metazeichen zu bieten.

flags kann auch einen der folgenden, nicht von POSIX.2 definierten Werte enthalten. Diese GNU-Erweiterungen sind:

GLOB_PERIOD
Den Abgleich eines führenden Punktes mit Metazeichen zulassen. Standardmäßig können Metazeichen nicht mit einem führenden Punkte abgeglichen werden.
GLOB_ALTDIRFUNC
Die alternativen Funktionen pglob->gl_closedir, pglob->gl_readdir, pglob->gl_opendir, pglob->gl_lstat und pglob->gl_stat anstelle der normalen Bibliotheksfunktionen für den Zugriff auf das Dateisystem verwenden.for file system access instead of the normal library functions.
GLOB_BRACE
Ersetzen von Klammerausdrücken der Form {a,b} im csh(1)-Stil. Klammerausdrücke können verschachtelt werden. So liefert zum Beispiel die Angabe des Musters »{foo/{,cat, dog}, bar}« die gleichen Ergebnisse wie vier separate Aufrufe von glob() mit den Zeichenketten »foo/«, »foo/cat«, »foo/dog« und »bar«.
GLOB_NOMAGIC
Falls das Muster keine Metazeichen enthält, sollte es als das einzige Ergebnis zurückgegeben werden, auch wenn keine Datei mit diesem Namen existiert.
GLOB_TILDE
Tilden ersetzen. Falls eine Tilde (»~«) das einzige Zeichen im Muster ist oder einer Tilde als erstes Zeichen sofort ein Schrägstrich (»«) folgt, wird die Tilde durch das Home-Verzeichnis des Aufrufenden ersetzt. Falls der einleitenden Tilde ein Benutzername folgt (z. B. ~/andrea/bin), werden Tilde und Benutzername durch das Home-Verzeichnis des Benutzers ersetzt. Falls der Benutzername ungültig ist oder das Home-Verzeichnis nicht bestimmt werden kann, wird keine Substitution durchgeführt.
GLOB_TILDE_CHECK
Dieses Flag bewirkt ein Verhalten ähnlich dem von GLOB_TILDE. Der Unterschied ist, dass bei einem ungültigen Benutzernamen oder bei nicht ermittelbarem Home-Verzeichnis nicht das Muster selbst als Name verwendet wird, sondern glob() GLOB_NOMATCH zurückgibt, um einen Fehler anzuzeigen.
GLOB_ONLYDIR
Dies ist ein Hinweis für glob(), dass der Aufrufende nur an Verzeichnissen interessiert ist, die dem Muster entsprechen. Falls die Implementierung Informationen zum Dateityp leicht ermitteln kann, werden Dateien, die keine Verzeichnisse sind, nicht an den Aufrufenden zurückgegeben. Allerdings muss der Aufrufende noch prüfen, ob die zurückgegebenen Dateien Verzeichnisse sind. (Der Zweck dieses Flags ist lediglich eine Leistungsoptimierung, wenn der Aufrufende nur an Verzeichnissen interessiert ist.)

Falls errfunc nicht NULL ist, wird sie mit den Parametern epath und eerrno aufgerufen, wenn ein Fehler auftritt. epath ist der Zeiger auf den Pfad, bei dem der Fehler passierte, eerrnoder Wert von errno, wie er von opendir()3, readdir(3) bzw. stat(2) gesetzt wurde. Falls errfunc einen Wert ungleich null zurückgibt oder wenn GLOB_ERR gesetzt ist, kehrt glob() nach dem Aufruf von errfunc in das aufrufende Programm zurück.

Nach erfolgreicher Ausführung enthält pglob->gl_pathc die Anzahl der gefundenen Pfadnamen und pglob->gl_pathv ist ein Zeiger auf die Liste der gefundenen Pfadnamen. Die Liste der Zeiger wird mit einem Null-Zeiger abgeschlossen.

Es ist möglich, glob() mehrfach aufzurufen. In diesem Fall muss GLOB_APPEND in flags beim zweiten und jedem weiteren Aufruf gesetzt werden.

Als eine GNU-Erweiterung wird pglob->gl_flags auf die angegebenen Flags, logisch oder-verknüpft mit GLOB_MAGCHAR gesetz, falls Metazeichen gefunden wurden.

RÜCKGABEWERT

Nach erfolgreicher Ausführung gibt glob() null zurück. Andere mögliche Werte sind:
GLOB_NOSPACE
Speicher aufgebraucht
GLOB_ABORTED
für einen Lesefehler und
GLOB_NOMATCH
falls keine Pfade gefunden wurden.

ATTRIBUTE

Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
SchnittstelleAttributWert
glob() Multithread-Fähigkeit MT-Unsafe race:utent env
sig:ALRM timer locale
globfree() Multithread-FähigkeitMT-Safe

In der obigen Tabelle bedeutet utent in race:utent, dass, falls eine der Funktionen setutent(3), getutent(3) oder endutent(3) in verschiedenen Threads eines Programms parallel verwandt werden, konkurrierende Zugriffe auf Daten (»data races«) auftreten könnten.glob(3) ruft diese Funktionen auf, daher werden Benutzer mit »race:utent« daran erinnert.

KONFORM ZU

POSIX.1-2001, POSIX.1-2008, POSIX.2.

ANMERKUNGEN

Die Strukturelemente gl_pathc und gl_offs werden in der Glibc 2.1 als size_t deklariert, wie sie es gemäß POSIX.2 sein sollten. In Glibc 2.0 sind sie aber als int deklariert.

FEHLER

Die Funktion glob() kann bei Fehlern der zugrunde liegenden Funktionsaufrufe wie malloc(3) oder opendir(3) fehlschlagen. Diese speichern ihren Fehlercode in errno.

BEISPIEL

Ein Anwendungsbeispiel ist der folgende Code, der die Eingabe von

ls -l *.c ../*.c

in der Shell simuliert:

glob_t globbuf;
globbuf.gl_offs = 2;
glob("*.c", GLOB_DOOFFS, NULL, &globbuf);
glob("../*.c", GLOB_DOOFFS | GLOB_APPEND, NULL, &globbuf);
globbuf.gl_pathv[0] = "ls";
globbuf.gl_pathv[1] = "-l";
execvp("ls", &globbuf.gl_pathv[0]);

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.06 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze <[email protected]>, Martin Eberhard Schauer <[email protected]> und Mario Blättermann <[email protected]> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <[email protected]>.