glob(3) Library Functions Manual glob(3) BEZEICHNUNG glob, globfree - findet Pfadnamen, die einem Muster genugen; gibt von glob() belegten Speicher frei BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int glob(const char *restrict Muster, int Schalter, int (*Fehlerfunk)(const char *fPfad, int Fehlernum), glob_t *restrict pglob); void globfree(glob_t *pglob); BESCHREIBUNG Die Funktion glob() sucht alle Pfadnamen, die nach den von der Shell verwendeten Regeln dem Muster genugen und gibt sie zuruck (siehe auch glob(7)). Tilde-Erweiterungen und Parametersubstitutionen werden nicht durchgefuhrt, falls sie das mochten, mussen Sie wordexp(3) verwenden. Die Funktion globfree() gibt den dynamisch allozierten Speicher wieder frei, der noch von einem fruheren 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 ) und enthalt die folgenden von POSIX.2 definierten Elemente (als Erweiterung konnen zusatzliche 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-Verknupfung von null oder mehreren der folgenden symbolischen Konstanten, die das Verhalten von glob() bestimmen: GLOB_ERR Funktion bei Lesefehler beenden (weil z. B. fur ein Verzeichnis das Lesen nicht gestattet ist). Standardmassig versucht glob(), trotz Fehlern weiterzumachen und alle Verzeichnisse zu lesen, die ihr moglich sind. GLOB_MARK An jeden gefundenen Pfad einen Schragstrich an, wenn dieser einemVerzeichnis entspricht. GLOB_NOSORT Die zuruckgegebenen Pfadnamen nicht sortieren. Der einzige Grund dafur ist das Einsparen von Zeit fur die Verarbeitung. Standardmassig werden die zuruckgegebenen Pfadnamen sortiert. GLOB_DOOFFS pglob->gl_offs Eintrage am Anfang der String-Liste in pglob->pathv reservieren. Die reservierten Eintrage enthalten Nullzeiger. GLOB_NOCHECK Falls kein Muster passt, das ursprungliche Muster zuruckgeben. Standardmassig gibt glob() GLOB_NOMATCH zuruck, wenn es keine Fundstellen gibt. GLOB_APPEND Die Ergebnisse dieses Aufrufs an den Ergebnisvektor eines fruheren Aufrufs von glob() anhangen. Setzen Sie diesen Schalter nicht beim ersten Aufruf von glob(). GLOB_NOESCAPE Den linksseitigen Schragstrich (>>\<<) 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. Schalter kann auch einen der folgenden, nicht von POSIX.2 definierten Werte enthalten. Diese GNU-Erweiterungen sind: GLOB_PERIOD Den Abgleich eines fuhrenden Punktes mit Metazeichen zulassen. Standardmassig konnen Metazeichen nicht mit einem fuhrenden 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 fur den Zugriff auf das Dateisystem verwenden.for file system access instead of the normal library functions. GLOB_BRACE Ersetzen von Klammerausdrucken der Form {a,b} im csh(1)-Stil. Klammerausdrucke konnen 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 enthalt, sollte es als das einzige Ergebnis zuruckgegeben 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 Schragstrich (>>\[u00AB]) 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 ungultig ist oder das Home-Verzeichnis nicht bestimmt werden kann, wird keine Substitution durchgefuhrt. GLOB_TILDE_CHECK Dieser Schalter bewirkt ein Verhalten ahnlich dem von GLOB_TILDE. Der Unterschied ist, dass bei einem ungultigen Benutzernamen oder bei nicht ermittelbarem Home-Verzeichnis nicht das Muster selbst als Name verwendet wird, sondern glob() GLOB_NOMATCH zuruckgibt, um einen Fehler anzuzeigen. GLOB_ONLYDIR Dies ist ein Hinweis fur 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 zuruckgegeben. Allerdings muss der Aufrufende dennoch prufen, ob die zuruckgegebenen Dateien Verzeichnisse sind. (Der Zweck dieses Schalters ist lediglich eine Leistungsoptimierung, wenn der Aufrufende nur an Verzeichnissen interessiert ist.) 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 zuruckgibt oder wenn GLOB_ERR gesetzt ist, kehrt glob() nach dem Aufruf von Fehlerfunk in das aufrufende Programm zuruck. Nach erfolgreicher Ausfuhrung enthalt 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 moglich, 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-verknupft, gesetzt, falls Metazeichen gefunden wurden. RUCKGABEWERT Nach erfolgreicher Ausfuhrung gibt glob() null zuruck. Andere mogliche Werte sind: GLOB_NOSPACE Speicher aufgebraucht GLOB_ABORTED fur einen Lesefehler und GLOB_NOMATCH falls keine Pfade gefunden wurden. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------+-------------------------+-----------------------------+ |Schnittstelle | Attribut | Wert | +--------------+-------------------------+-----------------------------+ |glob() | Multithread-Fahigkeit | MT-Unsicher race:utent env | | | | sig:ALRM timer locale | +--------------+-------------------------+-----------------------------+ |globfree() | Multithread-Fahigkeit | MT-Sicher | +--------------+-------------------------+-----------------------------+ 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 konnten. glob() ruft diese Funktionen auf, daher werden Benutzer mit >>race:utent<< daran erinnert. STANDARDS POSIX.1-2008. GESCHICHTE POSIX.1-2001, POSIX.2. ANMERKUNGEN Die Strukturelemente gl_pathc und gl_offs werden in der Glibc 2.1 als size_t deklariert, wie sie es gemass 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. BEISPIELE 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]); SIEHE AUCH ls(1), sh(1), stat(2), exec(3), fnmatch(3), malloc(3), opendir(3), readdir(3), wordexp(3), glob(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze , Martin Eberhard Schauer , Mario Blattermann und Dr. Tobias Quathamer erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 glob(3)