glob(3) | Library Functions Manual | glob(3) |
glob, globfree - findet Pfadnamen, die einem Muster genügen; gibt von glob() belegten Speicher frei
Standard-C-Bibliothek (libc, -lc)
#include <glob.h>
int glob(const char *restrict Muster, int Schalter, int (*Fehlerfunk)(const char *fPfad, int Fehlernum), glob_t *restrict pglob); void globfree(glob_t *pglob);
Die Funktion glob() sucht alle Pfadnamen, die nach den von der Shell verwendeten Regeln dem Muster genügen und gibt sie zurück (siehe auch glob(7)). Tilde-Erweiterungen und Parametersubstitutionen werden nicht durchgeführt, falls sie das möchten, müssen Sie wordexp(3) verwenden.
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 Schalter besteht aus einer bitweisen ODER-Verknüpfung von null oder mehreren der folgenden symbolischen Konstanten, die das Verhalten von glob() bestimmen:
Schalter kann auch einen der folgenden, nicht von POSIX.2 definierten Werte enthalten. Diese GNU-Erweiterungen sind:
Falls Fehlerfunk nicht NULL ist, wird sie mit den Parametern fPfad und Fehlernum aufgerufen, wenn ein Fehler auftritt. fPfad ist der Zeiger auf den Pfad, bei dem der Fehler passierte, Fehlernum der Wert von errno, wie er von opendir(3), readdir(3) bzw. stat(2) gesetzt wurde. Falls Fehlerfunk einen Wert ungleich null zurückgibt oder wenn GLOB_ERR gesetzt ist, kehrt glob() nach dem Aufruf von Fehlerfunk 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 Nullzeiger abgeschlossen.
Es ist möglich, glob() mehrfach aufzurufen. In diesem Fall muss GLOB_APPEND in Schalter beim zweiten und jedem weiteren Aufruf gesetzt werden.
Als eine GNU-Erweiterung wird pglob->gl_flags auf die angegebenen Schalter, logisch mit GLOB_MAGCHAR oder-verknüpft, gesetzt, falls Metazeichen gefunden wurden.
Nach erfolgreicher Ausführung gibt glob() null zurück. Andere mögliche Werte sind:
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert |
glob() | Multithread-Fähigkeit | MT-Unsafe race:utent env sig:ALRM timer locale |
globfree() | Multithread-Fähigkeit | MT-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() ruft diese Funktionen auf, daher werden Benutzer mit »race:utent« daran erinnert.
POSIX.1-2001, POSIX.1-2008, POSIX.2.
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.
Die Funktion glob() kann bei Fehlern der zugrunde liegenden Funktionsaufrufe wie malloc(3) oder opendir(3) fehlschlagen. Diese speichern ihren Fehlercode in errno.
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]);
ls(1), sh(1), stat(2), exec(3), fnmatch(3), malloc(3), opendir(3), readdir(3), wordexp(3), glob(7)
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze <joey@infodrom.org>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Mario Blättermann <mario.blaettermann@gmail.com> und Dr. Tobias Quathamer <toddy@debian.org> 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 die Mailingliste der Übersetzer.
5. Februar 2023 | Linux man-pages 6.03 |