Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

glob, globfree - Generierung von Pfadnamen, die zu einem Muster passen

&pagelevel(4)&pagelevel

Definition

#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 glob()-Funktion ist ein Pfadnamengenerator, der die in XCU Pattern Matching Notation" definierten Regeln implementiert, wobei Regel 3 in „XCU Patterns Used for Filename Expansion" optional unterstützt wird

Die Struktur glob_t ist in glob.h definiert und enthält mindestens folgende Elemente:

size_t gl_pathc

Anzahl der Pfadnamen, die mit pattern übereinstimmen.

char ** gl_pathv

Zeiger auf eine Liste der übereinstimmenden Pfadnamen.

size_t gl_offs

Anzahl der Einträge, die am Anfang von gl_pathv reserviert werden sollen.

Das Argument pattern ist ein Zeiger auf ein zu expandierendes Pfadnamen-Muster. Die Funktion glob() vergleicht alle zugreifbaren Pfadnamen mit diesem Muster und erstellt eine Liste aller übereinstimmenden Pfadnamen. Um auf einen Pfadnamen zugreifen zu können, benötigt glob() eine Suchberechtigung für jede Komponente eines Pfads mit Ausnahme der letzten und eine Leseberechtigung für jedes Verzeichnis einer Dateinamenkomponente von pattern, die eines der folgenden Sonderzeichen enthält: '*', '?', und '['.

Es liegt in der Verantwortung des Anrufers, die Struktur zu erstellen, auf die pglob zeigt. Die Funktion glob() weist nach Bedarf weiteren Speicherplatz zu, einschließlich des Speichers, auf den gl_pathv zeigt. Die Funktion globfree() gibt den mit pglob verknüpften Speicherplatz von einem vorherigen Aufruf von glob() frei.

Das Argument flags wird verwendet, um das Verhalten von glob() zu steuern. Der Wert von Flags ist eine bitweise inklusive Oder-Verknüpfung von null oder mehreren der folgenden Konstanten, die in glob.h definiert sind:

GLOB_APPEND

Anhängen der generierten Pfadnamen an die eines früheren Aufrufs von glob().

GLOB_DOOFFS

Berücksichtigung von pglob->gl_offs.
Wenn dieses Flag gesetzt ist, wird pglob->gl_offs verwendet, um anzugeben, wie viele Nullzeiger am Anfang von pglob->gl_pathv hinzugefügt werden sollen. Mit anderen Worten, pglob->gl_pathv soll auf pglob->gl_offs Nullzeiger zeigen, gefolgt von pglob->gl_pathc Pfadnamenzeigern, gefolgt von einem Nullzeiger.

GLOB_ERR

Veranlasst glob() zurückzukehren, wenn es auf ein Verzeichnis stößt, das nicht geöffnet oder gelesen werden kann. Normalerweise sucht glob() weiterhin Übereinstimmungen.

GLOB_MARK

Anhängen eines '/' an jeden Pfadnamen, der ein Verzeichnis ist, das dem Muster entspricht.

GLOB_NOCHECK

Unterstützung der Regel 3 in XCU Patterns Used for Filename Expansion".

Wenn pattern keinem Pfadnamen entspricht, gibt glob() 0 und einen Zeiger auf eine Liste zurück, die nur aus pattern besteht, und die Anzahl der übereinstimmenden Pfadnamen beträgt 1.
Wenn GLOB_NOCHECK nicht gesetzt ist und pattern keinem Pfadnamen entspricht, gibt glob() GLOB_NOMATCH zurück und die Anzahl der übereinstimmenden Pfadnamen ist 0.

GLOB_NOESCAPE

Deaktivierung des Entwertungszeichens '\'.

GLOB_NOSORT

Normalerweise sortiert glob() die übereinstimmenden Pfadnamen gemäß der aktuellen Einstellung von LC_COLLATE. Wenn dieses Flag verwendet wird, ist die Reihenfolge der zurückgegebenen Pfadnamen nicht festgelegt.

Das Flag GLOB_APPEND kann verwendet werden, um einen neuen Satz von Pfadnamen an diejenigen anzuhängen, die in einem vorherigen Aufruf von glob() gefunden wurden. Die folgenden Regeln gelten für Anwendungen, wenn zwei oder mehr Aufrufe von glob() mit demselben Wert von pglob und ohne dazwischenliegende Aufrufe von globfree() ausgeführt werden:

  1. Der erste derartige Aufruf darf GLOB_APPEND nicht setzen. Alle nachfolgenden Anrufe müssen es setzen.

  2. Alle Aufrufe müssen GLOB_DOOFFS setzen, oder kein Aufruf darf es setzen.

  3. Nach dem zweiten Aufruf zeigt pglob->gl_pathv auf eine Liste, die Folgendes enthält:

    1. Null oder mehr Nullzeiger, wie durch GLOB_DOOFFS und pglob->gl_offs angegeben.

    2. Zeiger auf die Pfadnamen, die sich vor dem Aufruf in der Liste pglob->gl_pathv befanden, in derselben Reihenfolge wie zuvor.

    3. Zeiger auf die neuen Pfadnamen, die beim zweiten Aufruf in der angegebenen Reihenfolge generiert wurden.

  4. Die in pglob->gl_pathc zurückgegebene Anzahl entspricht der Gesamtzahl der Pfadnamen aus den beiden Aufrufen.
  5. Die Anwendung kann jedes Feld nach einem Aufruf von glob() ändern. Wenn dies der Fall ist, muss die Anwendung diese Felder vor einem nachfolgenden Aufruf von glob() dem Flag GLOB_APPEND oder globfree() und demselben pglob-Wert auf den ursprünglichen Wert zurücksetzen.

If, during the search, a directory is encountered that cannot be opened or read and errfunc is not a null pointer,  glob() calls (*errfunc()) with two arguments:

Wenn während der Suche ein Verzeichnis gefunden wird, das nicht geöffnet oder gelesen werden kann und errfunc kein Nullzeiger ist, ruft glob() (*errfunc ()) mit zwei Argumenten auf:

  1. Das Argument epath ist ein Zeiger auf den Pfadnamen, der den Fehler verursacht hat.

  2. Das Argument eerrno ist der Wert von errno aus dem Fehler, wie er von opendir()readdir() oder stat() gesetzt wurde.

Wenn (*errfunc()) aufgerufen wird und einen Wert ungleich Null zurückgibt oder wenn GLOB_ERR in Flags gesetzt ist, beendet glob() das Durchsuchen und gibt GLOB_ABORTED zurück, nachdem gl_pathc und gl_pathv in pglob versorgt wurden, um die bereits gescannten Pfade anzuzeigen. Wenn GLOB_ERR nicht gesetzt ist und entweder errfunc ein Nullzeiger ist oder (*errfunc()) 0 zurückgibt, wird der Fehler ignoriert.

Die folgenden Konstanten sind als Fehlerrückgabewerte definiert:

GLOB_ABORTED

Das Durchsuchen wurde beendet, weil GLOB_ERR gesetzt ist oder (*errfunc()) einen Wert ungleich 0 zurückgegeben hat.

GLOB_NOMATCH

Das Muster stimmt mit keinem vorhandenen Pfadnamen überein, und GLOB_NOCHECK wurde in Flags nicht gesetzt.

GLOB_NOSPACE

Ein Versuch, Speicher zuzuweisen, ist fehlgeschlagen.

Erweiterung

GLOB_ABORTED

An glob() wurde ein ungültiges Flag übergeben.

GLOB_BADPAT

An glob() wurde ein ungültiges Muster übergeben. (Ende)

Returnwert

für glob()


0

bei Erfolg.

Das Argument pglob->gl_pathc gibt die Anzahl der übereinstimmenden Pfadnamen zurück und das Argument pglob->gl_pathv enthält einen Zeiger auf eine Null-terminierte Liste der übereinstimmenden und sortierten Pfadnamen. Wenn allerdings pglob->gl_pathc 0 ist, ist der Inhalt von pglob->gl_pathv undefiniert.


Integer-Wert, der einen Fehler anzeigt, wie in glob.h beschrieben; die Argumente pglob->gl_pathc und pglob->gl_pathv werden weiterhin gesetzt, wie oben definiert.


für globfree():

Die Funktion gibt keinen Wert zurück..

Fehler

glob() schlägt fehl, wenn gilt:

Fehler, der von opendir()readdir() oder stat() während der Suche erkannt wurde.

Erweiterung


EINVAL

ungültiges Flag angegeben (Ende)

Hinweise

Diese Funktion wird nicht bereitgestellt, um Dienstprogrammen die Möglichkeit zu geben, Pfadnamen-Erweiterungen auf den Argumenten durchzuführen, da diese Funktionalität von der Shell ausgeführt wird und von Dienstprogrammen ausdrücklich nicht erwartet wird, dass sie dies wiederholen. Stattdessen wird sie für Anwendungen bereitgestellt, die eine Pfadnamenerweiterung für Zeichenfolgen durchführen müssen, die aus anderen Quellen stammen, z. B. ein von einem Benutzer eingegebenes oder aus einer Datei gelesenes Muster.

Um festzustellen, ob ein Pfadname mit einem bestimmten Muster übereinstimmt, kann ein Dienstprogramm fnmatch() verwenden.

Beachten Sie, dass gl_pathc und gl_pathv auch dann eine Bedeutung haben, wenn glob() fehlschlägt. Dadurch kann glob() im Fehlerfall Teilergebnisse melden. Wenn jedoch gl_pathc 0 ist, wird gl_pathv nicht angegeben, auch wenn glob() keinen Fehler zurückgegeben hat.
Die Option GLOB_NOCHECK kann verwendet werden, wenn eine Anwendung einen Pfadnamen erweitern möchte, falls Platzhalter angegeben sind, das Muster jedoch ansonsten nur als Zeichenfolge behandelt werden soll. Dies kann beispielsweise für Optionsargumente verwendet werden.

Die neuen Pfadnamen, die durch einen nachfolgenden Aufruf mit GLOB_APPEND generiert wurden, werden nicht zusammen mit den vorherigen Pfadnamen sortiert. Dies spiegelt die Art und Weise wider, wie die Shell die Pfadnamenerweiterung behandelt, wenn mehrere Erweiterungen in einer Befehlszeile durchgeführt werden.

Siehe auch

exec(), fdopendir(), fnmatch(), fstatat(), readdir().