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: Der erste derartige Aufruf darf GLOB_APPEND nicht setzen. Alle nachfolgenden Anrufe müssen es setzen. Alle Aufrufe müssen GLOB_DOOFFS setzen, oder kein Aufruf darf es setzen. Nach dem zweiten Aufruf zeigt pglob->gl_pathv auf eine Liste, die Folgendes enthält: Null oder mehr Nullzeiger, wie durch GLOB_DOOFFS und pglob->gl_offs angegeben. Zeiger auf die Pfadnamen, die sich vor dem Aufruf in der Liste pglob->gl_pathv befanden, in derselben Reihenfolge wie zuvor. Zeiger auf die neuen Pfadnamen, die beim zweiten Aufruf in der angegebenen Reihenfolge generiert wurden.
- Die in pglob->gl_pathc zurückgegebene Anzahl entspricht der Gesamtzahl der Pfadnamen aus den beiden Aufrufen.
- 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: Das Argument epath ist ein Zeiger auf den Pfadnamen, der den Fehler verursacht hat. 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) |
|
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. |